我遇到了jQuery没有触发vanilla javascript事件的问题:
var jqSelect = $('select') ;
var vaSelect = document.getElementsByTagName('select')[0];
vaSelect.addEventListener('change', function (e) {
console.log('Vanilla change: ', this.value);
}, false);
jqSelect.on('change', function (e) {
console.log('jQuery change: ', $(this).val());
});
jqSelect.change() ; // Same with jqSelect.trigger('change');
输出:
jQuery change: 0
JSFddle:http://jsfiddle.net/arunpjohny/3qmyan6t/1(感谢@ arun-p-johny)
我想使用bootstrap-selectpicker(http://silviomoreto.github.io/bootstrap-select/),它通过一个监听vanilla事件的插件来激活jQuery事件。
这是预期的行为吗?如果是这样,是否有解决方法?
修改:我当前的解决方法:
function changeEvent (e) {
$(this).off('change.jqWorkAround');
var evt = document.createEvent("HTMLEvents");
evt.initEvent('change', false, true);
this.dispatchEvent(evt);
$(this).on('change.jqWorkAround', changeEvent);
}
$('select').on('change.jqWorkAround', changeEvent);
如果只有vanilla监听器,那么这很有效,如果有一个jQuery监听器,它会被触发两次。
谢谢,