我想使用javascript将功能绑定到选择。我可以使用onchange或.change()做到这一点。但是,如果更改以编程方式完成,则似乎未触发我的函数:
例如
<select id='selectId' onChange;"javascript:console.log('changed - onchange')">
jQuery( "#selectId" ).change(function() {
console.log( "changed - .change()" );
});
jQuery('#selectId').val("2").change() //(a)
jQuery('#selectId').val("1"); //(b)
如果用户更改选择值,并且在情况(a)中,触发器将起作用。但是,第二种情况将不会被检测到。
我该如何进行绑定,因此它也会检测到情况(b)。
最佳答案
方法$.fn.val
本身不会触发更改事件。您可以做的最简单的事情是在需要时手动触发它。但是,如果您真的希望它自动发生,则可以扩展select元素的valHook
setter:
$.valHooks.select.set = function(orig) {
return function(el) {
var result = orig.apply(this, arguments);
$(el).trigger('change');
return result;
};
}($.valHooks.select.set);
这似乎很好。您只需要使用原始钩子并用触发代码对其进行补充。
演示:http://jsfiddle.net/cq07fL29/