有没有办法用jquery抓住dom泡沫



有没有办法在没有 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");

相关内容

  • 没有找到相关文章

最新更新