jQuery - Fire vanilla"改变"选择的事件

时间:2015-03-08 10:36:27

标签: javascript jquery javascript-events

我遇到了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监听器,它会被触发两次。

谢谢,

0 个答案:

没有答案