2010-02-24 77 views
9

每次我需要写一段JavaScript它监视的输入框,我通常最终会做这样的事情:是否有“texbox content changed”DOM事件?

$("#field").keyup(myHandler).keydown(myHandler).change(myHandler); 

它并不完美,但它通常在大多数情况下工作,所以我继续前进。我恰好有一点时间正确调查这一点。可能主要的问题是不能通过鼠标完成编辑(右键单击+粘贴/剪切)。另外,这不是我想要的。这捕获所有的光标移动和我没有真正感兴趣的其他键盘事件,这样的问题是:

有其输入的内容或在每次发射可靠的跨浏览器事件textarea的变化?

在一个简短的搜索过程中,我发现了onpropertychange和DOMAttrModified事件。但除了它们不适用于所有浏览器,它们在编辑输入或textarea时似乎并未被解雇。

+0

也许一个愚蠢的问题,但为什么'onchange'不是一个选项在这里?它过早起火了吗? – 2010-02-24 14:52:32

+0

它燃烧得太晚;它仅在文本框被留下时才会触发。 – 2010-02-24 14:54:09

回答

6

至少最新版本的Internet Explorer,Firefox,Chrome和Safari都支持cutpaste事件,这些事件在文本被剪切或粘贴到给定输入元素后立即触发。这些事件由键盘鼠标交互触发。听取这些和其他事件的组合应该提供您正在寻找的功能。

$("#foo").bind("keyup keydown change paste cut", handler); 

我在Firefox 3.6,铬5.0(DEV),和Safari 4在Firefox 3.5和IE8测试这在Mac上,并在Windows上。

+0

好的提示。为什么不按键,而不是按键? – 2010-02-25 01:52:59

+0

取决于浏览器,在任何情况下都不会触发'keypress'事件。例如,当按下Control键时,'keydown'和'keyup'将被触发,但'keypress'将* not *。在这种情况下,我认为这并不重要,但是由于OP的例子使用了'keydown'和'keyup',所以我也做了。使用'keypress'也可以在这里工作。 – 2010-02-25 02:21:26

+0

谢谢你,非常有用的提示。另外,我不知道你可以简单地连接这样的事件名称:$(“#foo”)。bind(“keyup keydown change paste cut”,handler)。 – 2010-02-25 10:07:00