我有两个系统,其中一个是使用Dojo,另一个是jQuery。我必须在它们之间建立一些联系,但我遇到了一个问题。
jQuery eventlistener在jQuery触发器之后被触发。 Dojo事件监听器不会被触发。为什么会这样?
我从当前的问题创建了一个最小的环境: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');
答案 0 :(得分:2)
jQuery绑定事件很复杂,基本上它与addEventListener
(或类似的)绑定它,并将附加信息附加到元素的数据容器。因此以后不能通过纯js使用它。触发器以类似的方式工作 - 它不会触发由dojo绑定的事件。 Dojo也做了一些技巧。总而言之,两个框架都使用dom level 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 ("fireEvent" in el) {
el.fireEvent("onchange");
} else {
var evt = document.createEvent("HTMLEvents");
evt.initEvent("change", false, true);
el.dispatchEvent(evt);
};