代码之家  ›  专栏  ›  技术社区  ›  Anthony Faull

检测禁用字段的更改

  •  0
  • Anthony Faull  · 技术社区  · 15 年前

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

    <input id="country" onpropertychange="alert(country.value)" disabled="disabled"/>
    <input type="button" onclick="country.value='USA'" value="Go" />
    
    2 回复  |  直到 12 年前
        1
  •  0
  •   chigley    15 年前

    country.value='USA'

    <input id="country" disabled="disabled" />
    <input type="button" onclick="country.value='USA'; alert(country.value)" value="Go" />
    
        2
  •  0
  •   cmcnulty    12 年前

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

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

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

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

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

    如果您所在的浏览器本机不支持propertychange事件,则此插件将不起任何作用。这是专为IE8-10设计的。对于非IE浏览器(和IE-11)使用 MutationObservers . 对于IE7或更低版本,您就完蛋了,因为它们不公开setter/getter函数。