1

有没有办法添加事件处理程序(比如.on('change' ..)禁用时的复选框?

我试过这个(见jsfiddle),但当我禁用复选框时它不会触发:

$('#myCB').on('change', function() {
     console.log('checkbox disabled? ' + $('#myCB').is(':disabled'));
});

$('#myCB').prop('disabled', true); // does NOT trigger the function above

编辑:我只想将逻辑添加到复选框,因为在我的应用程序中,我不知道复选框何时可能被禁用。

4

4 回答 4

2

最简单的方法应该是:

$('#myCB').prop('disabled', true).triggerHandler('change');
于 2013-05-02T11:09:38.837 回答
1

当字段的值更改时(因此当复选框被选中时) ,更改事件会被触发。它不适用于禁用。

在禁用复选框时触发事件可能会很棘手。见这里

于 2013-05-02T11:12:34.940 回答
1

我最好的猜测是您想收听 DOM 突变事件。您可以通过 DOM 突变事件作为任何普通的 javascript 事件(例如鼠标单击)来做到这一点。

请参阅:http ://www.w3.org/TR/2000/REC-DOM-Level-2-Events-20001113/events.html#Events-MutationEvent

例子:

$("element-root").bind(DOMSubtreeModified,"CustomHandler");
于 2013-05-02T11:20:32.533 回答
1

实际上,我只是发现了每次属性更改时触发更改事件的好方法:

var oldProp = $.fn.prop;
var newProp = function() {
    // console.log('$(..).prop() called');
    // execute jQuery's .prop() method
    var retFunc = oldProp.apply(this, arguments);
    // afterwards trigger custom event
    this.trigger('property_changed', this);
    return retFunc;
}
// replace jQuery's .prop() function with the new one
$.fn.prop = newProp;

现在每次我调用.prop()任何元素时,它都会自动触发我的自定义更改事件。请参阅更新的jsfiddle

编辑:正如 rahul maindargi 在他的评论中提到的,最好使用自定义事件而不是“更改”事件本身。我已经更新了我的代码,以便它现在使用自定义事件。

于 2013-05-02T11:56:16.140 回答