2010-01-05 30 views
1
$(document).ready(function() { 
$("input[id^='question']").live('keyup',function(ev){ 
    id=this.id.substr(8); 
    if (ajaxCallTimeoutID != null) 
    clearTimeout(ajaxCallTimeoutID); 
ajaxCallTimeoutID = setTimeout(function(){subjectivecheck(id)}, 1000); 
}); 
}); 

存在问题。当用户将文本粘贴到输入字段时,上面的函数不能被触发。如何解决这个问题呢?当用户在输入字段中输入文本或将文本粘贴到输入字段时,如何激发javascript函数?

+0

只有当用户停止输入一段时间时才需要使用subjectivecheck()。 – Steven 2010-01-05 08:52:00

回答

1

onchange事件就是你想要的。它会在文本框失去焦点(模糊)时触发,并且自收到焦点后已更改其值。它处理粘贴问题。

因此,代替.live('keyup',使用live('change'

这是一样好,没有使用一些荒谬的间隔轮询。只是为了上下文的目的,请注意,任何用户都可以在浏览器中随时关闭JavaScript。

+0

但是,如果用户正在打字?我只想检查用户停止输入时的值 – Steven 2010-01-07 04:36:22

+1

阅读第二句。 – 2010-01-07 05:51:31

0

粘贴(onpaste)事件不是标准 - 它仅在Internet Explorer(参见:http://msdn.microsoft.com/en-us/library/ms536955(VS.85).aspx)是AFAIK支持

的变化(onchange handlder)事件是标准的 - 但是,这只会火当值文本框在获得和失去焦点之间的时间变化 - 低检测到更改需要文本框失去焦点。

你可以做什么,使用setInterval()http://www.w3schools.com/jsref/met_win_setinterval.asp)轮询文本框的值,并将其与以前的值进行比较。

+0

我只想在用户停止输入时检查用户输入。 – Steven 2010-01-05 08:50:49

+0

在这种情况下'onchange'可能是你想要的。 – 2010-01-05 09:13:28

+0

不,但如果文本框没有失去焦点,但用户停止键入会怎么样。例如,用户停止键入,但输入光标仍在文本框中? – Steven 2010-01-05 09:19:11

0

在字段上的onfocus事件中,您可以启动计时器来检查字段值是否已更改。

并在onblur,清除该计时器。

使用Ctrl + V粘贴可以使用onkeyup,但不能用鼠标右键单击或使用浏览器撤消。

0

这不是唯一的问题。即使您可以在所有浏览器上可靠地捕捉剪切和粘贴,但您仍然可以在表单字段中添加更多内容。例如,在某些平台上,将文件拖动到输入将会放入路径名,而不会捕获任何事件。或者用户可能会右键单击 - 撤消更改内容。或删除。或者从输入或其他输入中选择一些文本,然后拖放它。可能还有很多我没有想到的内容。

如果你想要的所有更改表单域快于onchange被告知,恐怕也没有办法,只好不断地监测元素的value在轮询setInterval

相关问题