【问题标题】:Listen for deletion of input value监听输入值的删除
【发布时间】:2010-11-18 10:49:03
【问题描述】:

侦听输入文本字段更改的最推荐方法之一是将该字段绑定到按键事件。在大多数情况下都可以正常工作。但在某些情况下,这不起作用。例如,在 Firefox 中,当文本已被选中时,可以使用上下文菜单将其删除。这不会触发按键事件。执行此操作时,我没有发现为该文本字段触发的任何事件。 有什么建议我可以对此做出反应(在纯 Javascript 或 jQuery 中)?

【问题讨论】:

    标签: javascript jquery events input listener


    【解决方案1】:

    查看oninput 事件,我写了here

    oninput 触发所有形式的文本输入 - 包括剪切、粘贴、撤消、重做、清除、拖放和拼写更正。这是一个 HTML 5 事件,Internet Explorer 8 及更低版本不支持(但它在最新的 IE 9 预览版中)。但是,Internet Explorer 支持所有 DOM 对象上的专有事件 - onpropertychange。只要输入元素的值发生变化,就会触发。

    我没有注意到你用 标记了——既然你这样做了,可能值得一提的是我编写了一个插件来实现oninput 事件跨浏览器。你可以找到它here

    【讨论】:

    • 我想你已经解决了这个问题。
    • @Tim:哈哈,我当然在努力:-)
    • @Tim:除了他在博文中提到的错误,是的。
    • @TJC 即使有这些错误,oninput仍然优于关键事件。我昨天注意到 Opera 11 alpha 修复了这些问题。
    • Andy,您的实现存在一个问题(至少在 Linux 下的 Firefox 3.6.12 中)。输入绑定到输入事件的站点最初会自动滚动到末尾。是的,我知道……这听起来很奇怪,但我在几种情况下多次检查过。我也尝试调试它。它发生在jQuery内部的某个地方,在输入绑定被附加后不久......在初始化期间。
    【解决方案2】:

    最好的方法是将值存储在focus 事件上,然后重新检查blur 事件上的值。监听关键事件会触发很多通常是冗余的进程。大多数情况下,您只在用户完成输入(或删除)字段值时才对它感兴趣。

    这适用于跨浏览器,尽管在某些浏览器中委派焦点/模糊可能是一个问题。最简单的方法是将模糊/焦点侦听器直接应用于元素。

    只有像 autosuggest/complete 这样的实现例外,即使这样,您也可能希望消除按键输入的抖动,以便它仅在用户空闲几百毫秒时触发。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-10-07
      • 2014-05-30
      • 1970-01-01
      • 2011-05-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多