Why dojo.connect doesn't get fired after jQuery trigger?

*爱你&永不变心* 提交于 2020-01-06 18:37:17

问题


I have two system, one of them is using Dojo and the other one jQuery. I have to make some connection between them, but I'm experiencing a problem.

jQuery eventlistener get fired after the jQuery trigger. Dojo event listener doesn't get fired. Why is that happen?

I have created a minimal environment from my current problem: http://jsfiddle.net/vEkt6/

HTML:

<input type="text" value="0" name="a" id="a" />

JS:

var el = dojo.byId('a');
dojo.connect(el, 'change', function(){
    console.log('dojo');   
});

jQuery(el).on('change', function(){
     console.log('jquery');   
});

jQuery(el).val(1).trigger('change');

回答1:


The jQuery bind events is complicated, basically it bind it with addEventListener (or similiar) and attaches additional info to data container of element. So it can't be used via pure js later. trigger works in similiar way - it will not trigger event binded by dojo. Dojo also do some tricks. To summarize, both frameworks uses dom level 2 to attach events, so you can't just call el.onchange(), it will be null. However, there is widely known piece of pure code which will do the trick:

var el = dojo.byId('a');
dojo.connect(el, 'change', function(){
    console.log('dojo');   
});

jQuery(el).on('change', function(){
     console.log('jquery');   
});

jQuery(el).val(1);

if ("fireEvent" in el) {
    el.fireEvent("onchange");
} else {
    var evt = document.createEvent("HTMLEvents");
    evt.initEvent("change", false, true);
    el.dispatchEvent(evt);
};

Your modified demo



来源:https://stackoverflow.com/questions/16104337/why-dojo-connect-doesnt-get-fired-after-jquery-trigger

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!