有没有办法在禁用时向复选框添加事件处理程序(如.on('change' ..)
)?
我试过这个(请参阅jsfiddle),但是当我禁用复选框时它不会触发:
$('#myCB').on('change', function() {
console.log('checkbox disabled? ' + $('#myCB').is(':disabled'));
});
$('#myCB').prop('disabled', true); // does NOT trigger the function above
编辑:我想将逻辑添加到复选框,因为在我的应用程序中我不知道该复选框何时可能被禁用。
答案 0 :(得分:2)
最简单的方法应该是:
$('#myCB').prop('disabled', true).triggerHandler('change');
答案 1 :(得分:1)
答案 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在评论中提到的,最好使用自定义事件而不是“更改”事件本身。我已经更新了我的代码,以便它现在使用自定义事件。