$(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);
});
});
有一个问题。当用户将文本粘贴到输入字段时,无法触发上述函数。如何解决这个问题?
答案 0 :(得分:1)
onchange
事件就是您想要的。当文本框失去焦点(模糊)并且自收到焦点后其值已更改时,它将触发。它会处理粘贴问题。
而不是.live('keyup',
使用live('change'
。
这没有使用一些荒谬的间隔轮询,它就像它一样好。并且仅出于上下文的目的,请注意任何用户都可以在浏览器中随时禁用Javascript。
答案 1 :(得分:0)
粘贴(onpaste
)事件不是标准事件 - 仅在Internet Explorer中支持AFAIK(请参阅:http://msdn.microsoft.com/en-us/library/ms536955(VS.85).aspx)
更改(onchange
handlder)事件是标准的 - 但只有在文本框的值在获得焦点和失去焦点之间的时间内发生变化时才会触发 - i.o.w.检测到变化需要文本框失去焦点。
您可以做的是,使用setInterval()
(http://www.w3schools.com/jsref/met_win_setinterval.asp)轮询文本框的值,并将其与之前的值进行比较。
答案 2 :(得分:0)
在该字段的onfocus事件中,您可以启动计时器以检查字段值是否已更改。
在onblur,清除那个计时器。
使用ctrl + v的粘贴可以使用onkeyup,但不能用鼠标右键单击或使用浏览器撤消。
答案 3 :(得分:0)
这不是唯一的问题。即使您可以在所有浏览器上可靠地捕获剪切和粘贴,但您还无法在表单字段中放置内容。例如,在某些平台上,将文件拖动到输入会将路径名放入,没有任何事件可供您捕获。或者用户可以右键单击 - 撤消以更改内容。或者删除。或者从输入或其他输入中选择一些文本并拖放它。可能还有更多我没有想过的。
如果您希望比onchange
更快地通知表单字段的所有更改,我担心除了在轮询中不断监视元素的value
之外别无选择{1}}。