3

我想在启用或禁用输入时执行一个方法。可以在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();
});
4

2 回答 2

2

就在这里!对于现代浏览器,正确的方法是使用MutationObservers。不幸的是,甚至 IE10 都不支持 MutationObservers,更不用说 IE8 和 9。为了支持 IE 8-10,您需要在设置禁用时自己触发 propertychange 事件,为此您需要更改 getter以及要启用/禁用的元素的设置器。

这里有几篇关于这种技术的好文章:

不幸的是,您不能只在 setter 中的禁用事件上使用本机 fireEvent,因为它遵循禁用状态。因此我们需要一个外部事件触发系统。对我们来说幸运的是,jQuery 的好人已经做到了!

因此,有了这些知识,我编写了一个fireOnDisable jQuery 插件。要使用它,只需将其应用于选择器,例如:

$('#disabled_thing').fireOnDisable();

如果您使用的浏览器本身不支持 propertychange 事件,则此插件将什么也不做。它专门用于 IE8-10。对于 IE7 或更低版本,您被搞砸了,因为它们没有公开 setter/getter 函数。

于 2013-10-31T15:57:29.700 回答
1

是的,但你正在尝试的并不是一件容易的事。

您可以做的是,使用propertychange事件(顺便说一句,在 IE 上不可用)来捕捉属性的变化。

我用谷歌搜索,发现这个解决方案已经实现。一个插件来观察属性的变化。对于 IE 来说,它回退到setTimeout()这确实是非常可悲的。

无论如何,您使用该解决方案的解决方案将类似于:

$("input").watch('disabled', function() {
    console.log($(this).is(":disabled"));
});
于 2013-03-08T10:28:01.353 回答