什么时候textarea改变事件不被触发?
我依赖于每当textarea的内容发生变化时触发的更改事件。 根据jquery文档 ,在textarea失去焦点之前,这不会被触发。 在什么情况下不能触发事件? 是否会破坏页面,返回,点击链接等,总是会导致textarea失去焦点并被解雇?
换句话说,是否有可能在没有焦点的文本区域丢失输入的情况下离开页面?
使用不同测试时,在以下情况下不会触发更改事件:
- 用户点击浏览器的任何按钮 (后退按钮,刷新,主页按钮……) (Linux上的Chrome,Firefox和Opera,但点击地址栏时触发)
- 用户使用快捷方式(f5,ctrl + u …) (在Chrome + Firefox + Opera上测试) 。
你可以在这里测试一个例子: http : //jsfiddle.net/Atinux/S6TkP/
因此,我建议您在输入和textarea表单上使用keyUp和keyDown事件。
我会去W3c对事件的定义。
[http://www.w3.org/TR/DOM-Level-2-Events/events.html][1]
当控件失去输入焦点并且自获得焦点后其值已被修改时,会发生更改事件。 此事件对
INPUT
,SELECT
和TEXTAREA
元素有效。
- 泡泡:是的
- 可取消:否
- 上下文信息:无
任何时候它失去焦点,它应该被解雇。
在Safari和Chrome上,无论何时更改文本,都会触发CHANGE事件。 但是,如果删除所有文本,则不再触发CHANGE事件。 这是一个错误。 这就是人们使用KEYPRESS事件作为解决方法的原因
该事件将被触发但您无法可靠地收听。 当页面卸载时,表单元素会失去焦点,但是当偶数被触发以及监听器被调用时会出现竞争条件。 如果在页面完成卸载之前调用了侦听器,则可能会得到回调但是远远没有保证。
如果您希望能够更可靠地跟踪textarea
的更改,那么最好听一下keypress
事件。
最好使用keyUp / keyDown事件导致更改事件仅在textare / input更改且元素失去焦点时触发。