javascript - stopPropagation breaks event handler -
i have bit of head scratcher when comes using stoppropagation in javascript. according many different sources stoppropagation should stop bubbling of event parent elements, however, when use it seems stop event being called after first click. have worked simple bit of code reproduce behaviour below:
html:
<div id="root"> <div id="top"> <h1>click me!</h1> </div> </div> js/jquery:
var myevent = document.createevent("event"); myevent.initevent("boop", true, true); $("#root").on('boop', function (e) { alert("root boop!"); }); $("#top").on('boop', function (e) { // after called, event handler never fire again. e.stoppropagation(); alert("top boop!"); }); $("h1").click(function (e) { $("#top").get(0).dispatchevent(myevent); // know $("#top").trigger prevent problem, wrong form above? }); there fiddle well.
you dispatch myevent on call .stoppropagation(). every click thereafter use same instance of myevent on propagation has been stopped.
you'll need make copy of event before dispatching if want able click multiple times.
...or rewrite javascript this:
$("#root").on('boop', function (e) { alert("root boop!"); }); $("#top").on('boop', function (e) { e.stoppropagation(); alert("top boop!"); }); $("h1").click(function (e) { var myevent = document.createevent("event"); myevent.initevent("boop", true, true); $("#top").get(0).dispatchevent(myevent); });
Comments
Post a Comment