如何用自定义HTMLElement作为目标来触发一个更改事件
How to trigger a change event with a custom HTMLElement as the target?
我在section
HTML标签上注册了一个eventlistener,其中嵌入了各种下拉菜单:
function dropdownChange(e) {
window.console.log("The event is detected");
if (e.target.tagName === "SELECT")
window.console.log("The event's target is a dropdown"); // Some jobs
else
window.console.log("The event's target is NOT a dropdown"); // Some jobs
}
document.getElementById("filterSection").addEventListener("change", dropdownChange);
工作正常
我想做的是在加载页面时触发一次更改事件。根据我对Mozilla文档的理解,当DOM准备好时,我应该执行以下操作:
document.getElementById("periode").dispatchEvent(new Event("change"));
但是事件不是触发器(我没有在控制台中得到任何跟踪)。我认为事件传播会使工作…
如果我执行:
document.getElementById("filterSection").dispatchEvent(new Event("change"));
事件被很好地触发,但目标不是好的。
我做错了什么?
下拉列表的HTML代码:
<section id="filterSection">
<label>Période</label>
<select name="periode" id="periode">
<option value="2014-08">2014 Août</option>
<option value="2014-07">2014 Juillet</option>
<option value="2014-06">2014 Juin</option>
<option value="2014-05">2014 Mai</option>
<option value="2014-04">2014 Avril</option>
<option value="2014-03">2014 Mars</option>
<option value="2014-02">2014 Février</option>
<option value="2014-01">2014 Janvier</option>
<option value="2013-12">2013 Décembre</option>
<option value="2013-11">2013 Novembre</option>
<option value="2013-10">2013 Octobre</option>
<option value="2013-09">2013 Septembre</option>
<option value="2013-08">2013 Août</option>
<option value="2013-07">2013 Juillet</option>
<option value="2013-06">2013 Juin</option>
</select>
<!-- Other dropdowns...-->
</section>
我的主要浏览器目标是Firefox.17
我建议使用document.querySelector
代替getById,因为它更可靠。
所以更改下面的添加/调度事件。
document.querySelector("#periode").addEventListener("change", dropdownChange);
document.querySelector("#periode").dispatchEvent(new Event("change"));
UPDATE:有一个父节点,并让所有子节点有相同的事件,代码如下:
function dropdownChange(e) {
window.console.log("The event is detected");
if (e.target.tagName === "SELECT") window.console.log("The event's target is a dropdown");
else window.console.log("The event's target is NOT a dropdown");
}
//shiv, add a forEach to nodeList prototype to use forEach method on querySelectorAll lsit.
NodeList.prototype.forEach = Array.prototype.forEach;
var parent = document.querySelectorAll("#filter select");
parent.forEach(function(e){
e.addEventListener("change", dropdownChange);
});
document.querySelector("#filter select").dispatchEvent(new Event("change"));
http://jsfiddle.net/Holybreath/5sda7zsc/6/相关文章:
- React应用程序:道具在下一个事件后更新
- 算法:从数组(javascript/angular)中按当前日期获取上一个和下一个事件
- 全局屏幕span onclick触发一个事件javascript
- 在一个“事件”之后触发一个事件;喜欢“;
- 在离子2中,有任何方法可以将涡旋动量作为一个事件来检测
- 完整日历在多个资源上添加一个事件
- TinyMCE 将另一个事件添加到粗体和斜体按钮
- jQuery触发另一个事件中的事件
- 试图使一个事件依赖于另一个事件,并使用jquery自定义事件传递数据
- 存储一个事件处理程序中的变量以供另一个事件处理器使用
- 当表单验证失败时,我将如何最好地处理下一个事件
- 正在创建一个事件以更改鼠标悬停时的图片
- 当一个单元格被编辑时,是否有一个事件触发,但值没有'不要改变
- JavaScript一次性在多个元素上注册一个事件类型
- 如何在点击时发生另一个事件后使用localscroll
- Vanilla Js:在一个事件中开始一段时间的循环,然后用第二个事件打破它?('mouseover'启
- 取消除最后一个事件之外的所有事件,
- 鼠标滚轮按压-描述了一个事件的名称,以及如何使用jQuery侦听它
- Javascript开始处理下一个事件,然后第一次完成
- 在Jquery中将标志从一个事件传递到另一个事件