我想在启用或禁用输入时执行方法。可以用jQuery做吗?
我想做类似的事情(non-working code below
): -
$('input').on('enabled', function(e){
alert( 'Just now someone enabled : ' + $(this).attr('id') );
executeSomeHandlerForENABLED();
}).on('disabled', function(e){
alert( 'Just now someone disabled : ' + $(this).attr('id') );
executeSomeHandlerForDISABLED();
});
答案 0 :(得分:2)
是的!对于现代浏览器,正确的方法是使用MutationObservers。不幸的是,即使IE10不支持MutationObservers,也不要介意IE8和9.为了支持IE 8-10,你需要在设置禁用时自己触发propertychange事件,为此你需要更改getter和要启用/禁用的元素上的setter。
以下是一些关于此技术的好文章:
不幸的是,您不能仅在setter中的已禁用事件上使用本机fireEvent,因为它遵循禁用状态。因此我们需要一个外部事件触发系统。幸运的是,jQuery的优秀人员已经做到了!
所以,凭借这些知识,我编写了一个fireOnDisable jQuery插件。要使用它,只需将其应用于选择器,例如:
$('#disabled_thing').fireOnDisable();
如果您使用的浏览器本身不支持propertychange事件,则此插件将不执行任何操作。它专门用于IE8-10。对于IE7或更低版本,你被搞砸了,因为它们没有公开setter / getter函数。
答案 1 :(得分:1)
是,,但您所尝试的并非易事。
你可以做的是,使用propertychange
事件(顺便提一下IE上没有)来捕捉属性的变化。
我用谷歌搜索并发现了this解决方案。一个插件,用于观察属性的变化。对于IE来说,它回落到setTimeout()
,这确实非常悲伤。
无论如何,使用该解决方案的解决方案将类似于:
$("input").watch('disabled', function() {
console.log($(this).is(":disabled"));
});