2011-03-31 52 views
4

我有一个带有输入框的页面和一个处理此输入框的值并生成一段文本的函数。我想这个文本始终是最新的关于输入框的内容,所以我已经附上两个事件将其与jQuery来捕捉任何变化:使用Javascript/jQuery捕获输入框内容的所有更改

$('#input').bind('keyup cut paste', function(){...}); 

这工作得很好在大多数情况下。每当用户用任何方式使用键盘修改内容时,或者右键单击以使用剪切或粘贴功能时,文本将立即更新。不过,也有我还没有想出如何抓到两个事件,如果它甚至有可能这样做:

  • 当用户选择文本并拖动它做在输入框中输入一个不同的位置
  • 当用户使用在右键快捷菜单

这两个当然可以通过绑定change事件被检测到的删除操作,但这种做法的问题是,它不火,直到输入框丢失焦点。这些绑定的要点是随着输入框值的变化实时更新文本,所以change不好。

英语是我的第二语言,所以我可能简单地在我的谷歌搜索的措辞不好,但到目前为止他们什么都没有。在挖掘了一些相关的SO页面之后,我还没有找到任何解决方案,所以我在这里问。有没有一个我不知道的绑定事件?如果不是,我可以采取不同的方法吗?或者,这是简单的不可能与平原的Javascript?

+1

我从来不会知道英语是你的第二语言,所以我觉得这不是问题;) – rockerest 2011-03-31 02:17:36

回答

7

在非IE浏览器,你可以处理input事件。
在IE中,您可以处理propertychange事件。

Demo(在所有浏览器)

+0

神奇,正是我所期待的! :) – 2011-03-31 02:39:01

+0

如果从文档外部拖入文本,使用Ctrl + x(剪切)或从上下文菜单剪切,则在Opera中不起作用。 – RobG 2011-03-31 04:29:51

0

有可能this SO question (and related jsfiddle)可能会回答你的问题。

(在链接的jsfiddle,在机顶盒将文本测试)

换句话说,结合mouseupmousedown

+0

我试过这个,没有成功;在那个jsfiddle中,如果你尝试在上下文菜单中使用Delete选项,你会看到没有事件触发。当我开始在输入框中拖动我的选择时它会作出反应,但当我放下它并发生实际更改时,它不会触发任何事情。感谢虽然:) – 2011-03-31 02:42:07

0

如果你不能找到涵盖所有情况的事件的组合,你可能需要使用setInterval(function() {... }, period)。你可以玩period,看看它的效果如何。

+0

幸运的是,这没有必要。 – SLaks 2011-03-31 02:42:08

相关问题