复选框禁用时添加事件处理程序

时间:2013-05-02 11:06:44

标签: jquery javascript-events

有没有办法在禁用时向复选框添加事件处理程序(如.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 个答案:

答案 0 :(得分:2)

最简单的方法应该是:

$('#myCB').prop('disabled', true).triggerHandler('change');

答案 1 :(得分:1)

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

在禁用复选框时触发事件可能很棘手。请参阅here

答案 2 :(得分: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");

答案 3 :(得分: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在评论中提到的,最好使用自定义事件而不是“更改”事件本身。我已经更新了我的代码,以便它现在使用自定义事件。