有没有办法在没有 dom 连接的情况下捕获自定义事件的事件冒泡。
function b() {
$(this).trigger("b");
return this
}
function a() {
this.Test = function() {
new b()
};
return this
}
var o = new a()
$(o).on("b",function(){console.log("o")})
o.Test() // no bubbling
您需要使用Event()
对象来创建新事件:
var ev = new Event("look", {"bubbles":true, "cancelable":false});
document.dispatchEvent(ev); // the event bubbles and can't be cancelled
Src @ MDN
这是我
的解决方案,尽管我确信有更好的方法可以做到这一点(因为我使用了文档中没有的 Dom elemnt)
//Non Dom Objects
function NonDomJqueryObj(type) {
var T = this;
T.dom = $("<o></o>");
T.Obj = eval("new "+type+"()");
return T;
}
NonDomJqueryObj.prototype.addChild = function(child) {
this.dom.append(child.dom);
}
NonDomJqueryObj.prototype.Dispatch =function(event_name,args) {
if (!args)
$(this.dom).trigger(event_name);
else
$(this.dom).trigger(event_name,args);
}
NonDomJqueryObj.prototype.Listen =function(event_name,callback) {
$(this.dom).on(event_name,callback);
}
//some object costructor
function test() {
var T = this;
return T;
}
var child1 = new NonDomJqueryObj("test");
var child2 = new NonDomJqueryObj("test");
child1.addChild(child2);
var parent1 = new NonDomJqueryObj("test");
parent1.addChild(child1);
parent1.Listen("FIRST_EVENT",function(e,e_p) {
console.log(e_p)
console.log("FIRST_EVENT caught");
$("p").html($("p").html()+"<br>"+e_p+"<br>FIRST_EVENT caught")
})
child1.Dispatch("FIRST_EVENT","from child1");
child2.Dispatch("FIRST_EVENT","from child2");