什么时候textarea改变事件不被触发?

时间:2012-01-19 06:21:37

标签: javascript jquery dom backbone.js

每当textarea的内容发生变化时,我都会依赖于触发的更改事件。根据{{​​3}},在textarea失去焦点之前,这不会被触发。在什么情况下不能触发事件?是否会破坏页面,返回,点击链接等,总是会导致textarea失去焦点并被解雇?

或者换句话说,是否有可能在没有焦点的文本区域丢失输入的情况下留下页面?

5 个答案:

答案 0 :(得分:3)

使用不同测试时,在以下情况下不会触发更改事件:

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

您可以在此处测试一个示例:http://jsfiddle.net/Atinux/S6TkP/

所以我建议你在输入和textarea表单上另外使用keyUp和keyDown事件。

答案 1 :(得分:2)

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

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

  

当控件丢失输入焦点及其时,会发生更改事件   自获得关注以来,价值已被修改。此活动有效   INPUTSELECTTEXTAREA元素。

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

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

答案 2 :(得分:1)

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

答案 3 :(得分:0)

该事件将被触发但您无法可靠地收听。当页面卸载时,表单元素会失去焦点,但是当偶数被触发以及侦听器被调用时会出现竞争条件。 如果在页面完成卸载之前调用了您的侦听器,那么<​​em>可能会获得回调,但这远远不能保证。

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

答案 4 :(得分:0)

最好使用keyUp / keyDown事件导致更改事件仅在textare / input更改且元素失去焦点时触发。