我想使用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/

10-07 21:28