【问题标题】:When do textarea change events not get triggered?什么时候不会触发 textarea 更改事件?
【发布时间】:2012-01-19 06:21:36
【问题描述】:

我依赖于每当 textarea 的内容发生变化时触发的 change 事件。根据jquery docs,直到 textarea 失去焦点才会触发。什么情况下不能触发事件?关闭页面、返回、点击链接等是否总是会导致 textarea 失去焦点并被触发?

或者换一种说法,是否有可能在没有焦点文本区域丢失输入的情况下离开页面?

【问题讨论】:

  • 一定只是变更事件?还有很多其他活动;例如keyUp、keyDown、keyPress、焦点、粘贴。
  • 因为改变是我正在使用的事件:)

标签: javascript jquery dom backbone.js


【解决方案1】:

对于不同的测试,在以下情况下不会触发更改事件:

  • 用户点击浏览器的任何按钮(后退按钮、刷新、主页按钮...)(Linux 上的 Chrome、Firefox 和 Opera,但在点击地址栏时触发)
  • 用户使用快捷键(f5、ctrl+u...)(在 Chrome + Firefox + Opera 上测试)

你可以在这里测试一个例子:http://jsfiddle.net/Atinux/S6TkP/

因此,我建议您在输入和文本区域表单上另外使用 keyUp 和 keyDown 事件。

【讨论】:

  • 它们都在 Firefox 中为我触发。它是特定于浏览器的吗?
  • 我在 Linux 上使用 Chrome、Opera 和 Firefox 进行了测试,这取决于浏览器。所以是的,它是特定于浏览器的。
  • 很好的答案,谢谢!最后,这些约束实际上对我的用例来说很好,但很高兴知道它们是什么。
【解决方案2】:

我会参考 W3c 对事件的定义。

[http://www.w3.org/TR/DOM-Level-2-Events/events.html][1]

当控件失去输入焦点及其 自获得焦点后,值已被修改。本次活动有效期为 INPUTSELECTTEXTAREA 元素。

  • 气泡:是的
  • 可取消:否
  • 上下文信息:无

任何时候它失去焦点,都应该被解雇。

【讨论】:

  • 我想我的问题等同于“输入什么时候不会失去焦点?”
【解决方案3】:

在 Safari 和 Chrome 上,只要您更改文本,就会触发 CHANGE 事件。但是,如果您删除所有文本,则不再触发 CHANGE 事件。这是一个错误。这就是人们使用 KEYPRESS 事件作为解决方法的原因

【讨论】:

    【解决方案4】:

    该事件将被触发,但您将无法可靠地收听它。当页面正在卸载时,表单元素会失去焦点,但是在触发事件和调用侦听器时存在竞争条件。 如果您的监听器在页面完成卸载之前被调用,您可能会收到回调,但这远不能保证。

    如果您希望能够更可靠地跟踪对 textarea 的更改,最好收听 keypress 事件。

    【讨论】:

      【解决方案5】:

      最好使用 keyUp/keyDown 事件,因为 change 事件仅在 textare/input 更改并且元素失去焦点时触发。

      【讨论】:

        猜你喜欢
        • 2011-04-27
        • 2010-11-18
        • 1970-01-01
        • 2017-09-25
        • 1970-01-01
        • 1970-01-01
        • 2018-06-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多