Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 是否有方法在事件目标的子级上触发处理程序?_Javascript - Fatal编程技术网

Javascript 是否有方法在事件目标的子级上触发处理程序?

Javascript 是否有方法在事件目标的子级上触发处理程序?,javascript,Javascript,鉴于代码: var event = new Event('build'); // Listen for the event. elem.children[0].addEventListener('build', function (e) { ... }, false); // Dispatch the event. elem.dispatchEvent(event); 未调用子元素的处理程序。看 有没有一种方法可以调用处理程序而不直接在子(或其子)上调度事件?在我的实际用例中,各种元素(即

鉴于代码:

var event = new Event('build');

// Listen for the event.
elem.children[0].addEventListener('build', function (e) { ... }, false);

// Dispatch the event.
elem.dispatchEvent(event);
未调用子元素的处理程序。看

有没有一种方法可以调用处理程序而不直接在子(或其子)上调度事件?在我的实际用例中,各种元素(即子元素,而不是直接子元素)都会侦听
build
事件,我不知道具体是哪个(也不希望用类标记它们)


或者,对于我的用例,如果我能找到在“build”上具有处理程序的所有元素,那么我就可以在每个元素上调用事件。但是,我仍然想知道原始问题的答案。

这里是一个工作示例


你好
var theParent=document.getElementById('target');
var childElement=theParent.children[0];
addEventListener('build',doSomething,false);
功能剂量测定法(e){
var clickedItem=e.target.id;
警报(“你好”+单击编辑项);
}
var myEvent=new CustomEvent(“构建”{
详情:{
用户名:“stanimir”
},
});
childElement.dispatchEvent(myEvent);

如果我将构建事件更改为单击事件,它将正常工作。因此,我猜测您附加的事件不起作用。如果可以使用jQuery或任何其他库,请节省时间。在父元素上添加事件侦听器,并将事件分派给所有子元素。。。当您将事件发送到父级时,它没有事件处理程序。重复@AlexanderMadyuskin,看起来是重复的,但没有用普通javascript提供答案。请再次查看我的答案。修复了代码。享受吧!问题是自定义事件仍然附加在父元素上。这不是我所要求的。将事件分派到childElement上,这意味着它是目标。就像我写的,我有几个孩子,很难找到我需要触发的。此外,在您的示例中,我可以直接在子元素上调用'doSomething'。事件的要点是促进松散耦合。
<div id="target">
    <div id="child">hi</div>
</div>

var theParent = document.getElementById('target');
var childElement = theParent.children[0];

childElement.addEventListener('build', doSomething, false);

function doSomething(e) {
    var clickedItem = e.target.id;
    alert("Hello " + clickedItem);
}
var myEvent = new CustomEvent("build", {
    detail: {
        username: "stanimir"
    },
});

childElement.dispatchEvent(myEvent);