为什么dojo.connect不会在jQuery触发后被触发? [英] Why dojo.connect doesn't get fired after jQuery trigger?
问题描述
jQuery eventlistener在jQuery触发器之后被触发。 Dojo事件侦听器不会被触发。为什么会发生这种情况?
我从目前的问题创建了一个最小的环境: http://jsfiddle.net/vEkt6/
HTML:
< input type =textvalue =0name =aid =a/>
JS:
code> 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');
jQuery绑定事件很复杂,基本上它绑定与 addEventListener
(或类似)并附加附加信息到元素的数据容器。所以它以后不能通过纯js使用。触发器以类似的方式工作 - 它不会触发dojo绑定的事件。 Dojo也做了一些技巧。总而言之,两个框架都使用dom级别2来附加事件,所以你不能只调用el.onchange(),它将为null。然而,有一个广为人知的纯代码将会做到这一点:
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(fireEventin el){
el.fireEvent(onchange);
} else {
var evt = document.createEvent(HTMLEvents);
evt.initEvent(change,false,true);
el.dispatchEvent(evt);
};
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');
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);
};
这篇关于为什么dojo.connect不会在jQuery触发后被触发?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!