2016-02-03 3 views
1

Есть ли способ поймать событие пузырьков пользовательских событий без dom подключения.Есть ли способ уловить пузырь дома с jquery?

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 
+0

Не существует специального кода события. – Jai

ответ

0

Вы должны использовать Event() объект для создания новых событий:

var ev = new Event("look", {"bubbles":true, "cancelable":false}); 
document.dispatchEvent(ev); // the event bubbles and can't be cancelled 

Src @ MDN

+0

Я не уверен, что это решение, которое я ищу, поскольку оно использует «документ» Dom как диспетчер. Я создал решение и буду оценивать его: https: //jsfiddle.net/shaibam/fndys0Lm/ –

0

это мое решение, хотя я уверен, что есть лучший способ сделать это (так Я использовал элемент Dom, который не указан в документе)

//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");