检测禁用字段的更改

时间:2010-10-03 11:06:17

标签: javascript internet-explorer

当字段处于禁用状态时,似乎忽略了属性更改事件。有没有办法在值改变时运行代码?

<input id="country" onpropertychange="alert(country.value)" disabled="disabled"/>
<input type="button" onclick="country.value='USA'" value="Go" />

2 个答案:

答案 0 :(得分:0)

你能不能在country.value='USA'之后在按钮的onclick属性中添加你的事件?例如:

<input id="country" disabled="disabled" />
<input type="button" onclick="country.value='USA'; alert(country.value)" value="Go" />

答案 1 :(得分:0)

是的!简而言之,您需要在设置禁用时自行触发propertychange事件,为此,您需要更改要启用/禁用的元素上的getter和setter。

以下是一些关于此技术的好文章:

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

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

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

如果您使用的浏览器本身不支持propertychange事件,则此插件将不执行任何操作。它专门用于IE8-10。对于非IE浏览器(和IE-11),请使用MutationObservers。对于IE7或更低版​​本,你被搞砸了,因为它们没有公开setter / getter函数。