jquery 当复选框变为禁用时添加事件处理程序

byqmnocz  于 2022-11-03  发布在  jQuery
关注(0)|答案(4)|浏览(135)

当复选框被禁用时,有没有办法添加一个事件处理程序(如.on('change' ..))?
我尝试了这个方法(请参阅jsfiddle),但是当我禁用复选框时,它没有触发:

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

$('#myCB').prop('disabled', true); // does NOT trigger the function above
  • Edit:* 我想将逻辑添加到复选框中,只是因为在我的应用程序中,我不知道复选框何时会被禁用。
bfrts1fy

bfrts1fy1#

最简单的办法应该是:

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

ykejflvf2#

change事件会在字段值改变时触发(也就是复选框被选中时)。它不会在禁用时起作用。
在禁用复选框时触发一个事件可能比较棘手。请参阅here

stszievb

stszievb3#

我最好的猜测是你想监听DOM突变事件。你可以通过DOM突变事件来做这件事,就像任何普通的javascript事件一样,比如鼠标点击。
请参阅:http://www.w3.org/TR/2000/REC-DOM-Level-2-Events-20001113/events.html#Events-MutationEvent
示例:

$("element-root").bind(DOMSubtreeModified,"CustomHandler");
7d7tgy0s

7d7tgy0s4#

实际上,我刚刚发现了一种在每次属性更改时触发change事件的好方法:

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

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

相关问题