当用户在输入字段中键入文本或向其中粘贴文本时,如何启动javascript函数?

当用户在输入字段中键入文本或向其中粘贴文本时,如何启动javascript函数?,javascript,jquery,input,Javascript,Jquery,Input,有一个问题。当用户将文本粘贴到输入字段中时,无法启动上述功能。如何解决此问题?粘贴(onpaste)事件不是标准事件-它仅在Internet Explorer中受支持(请参阅:) 更改(onchangehandler)事件是标准事件,但只有当文本框的值在获得焦点和失去焦点之间发生更改时,才会触发该事件。i.o.w.检测更改需要文本框失去焦点 您可以使用setInterval()()轮询文本框的值,并将其与以前的值进行比较。粘贴(onpaste)事件不是标准事件-它仅在Internet Explo

有一个问题。当用户将文本粘贴到输入字段中时,无法启动上述功能。如何解决此问题?

粘贴(
onpaste
)事件不是标准事件-它仅在Internet Explorer中受支持(请参阅:)

更改(
onchange
handler)事件是标准事件,但只有当文本框的值在获得焦点和失去焦点之间发生更改时,才会触发该事件。i.o.w.检测更改需要文本框失去焦点

您可以使用
setInterval()
()轮询文本框的值,并将其与以前的值进行比较。

粘贴(
onpaste
)事件不是标准事件-它仅在Internet Explorer中受支持(请参阅:)

更改(
onchange
handler)事件是标准事件,但只有当文本框的值在获得焦点和失去焦点之间发生更改时,才会触发该事件。i.o.w.检测更改需要文本框失去焦点


您可以使用
setInterval()
()轮询文本框的值,并将其与以前的值进行比较。

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

在onblur,清除计时器


使用onkeyup可以使用ctrl+v进行粘贴,但使用鼠标右键单击或浏览器撤消则不行。

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

在onblur,清除计时器


使用onkeyup可以使用ctrl+v进行粘贴,但使用鼠标右键单击或浏览器撤消则不行。

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


如果您希望比
onchange
更快地获知表单字段的所有更改,恐怕除了在轮询
setInterval
中不断监视元素的
之外别无选择,这不是唯一的问题。即使您可以在所有浏览器上可靠地捕获剪切和粘贴(这是您无法做到的),仍然有更多的方法将内容放入表单字段中。例如,在某些平台上,将文件拖动到输入会将路径名放入,而不会捕获任何事件。或者用户可以右键单击“撤消”来更改内容。或删除。或者从输入或其他输入中选择一些文本并将其拖放。可能还有更多我没想到的


如果您希望比
onchange
更快地获知表单字段的所有更改,恐怕除了在轮询
setInterval
中不断监视元素的
onchange
事件之外,别无选择。当文本框失去焦点(模糊)并在收到焦点后其值发生更改时触发。它解决了粘贴问题

因此,不要使用
live('keyup'),
使用
live('change')


这是最好的,没有使用一些荒谬的间隔轮询。并且,仅出于上下文的目的,请注意,任何用户都可以随时在浏览器中禁用Javascript。

您需要的是
onchange
事件。当文本框失去焦点(模糊)时,它会触发自从收到焦点后,它的值发生了变化。它处理粘贴问题

因此,不要使用
live('keyup'),
使用
live('change')


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

我只想在用户停止键入时检查用户输入。在这种情况下,
onchange
可能是您想要的。不,但是如果textbox没有失去焦点,但用户停止了键入。例如,用户停止键入,但输入光标仍在textbox中?您可以在检测到按键时清除当前超时,当然也可以设置一个新的超时。这样可以防止过早检测到更改。此外,您只能在ttex之后开始添加间隔tbox获得焦点,并在出现模糊事件时将其清除。这将使应用程序更具响应性,因为轮询文本框不会浪费时间。罗兰,我认为轮询对于浏览器中的鼠标粘贴或编辑->撤消是必要的。我只想在用户停止键入时检查用户输入。在这种情况下,
onchange
可能是您想要的。不,但w如果文本框没有失去焦点,但用户停止键入,则会出现什么情况?例如,用户停止键入,但输入光标仍在文本框中?您可以在检测到按键时清除当前超时,当然也可以设置一个新的超时。这样可以防止过早检测到更改。此外,您只能在r ttextbox获得焦点,并在出现模糊事件时将其清除。这将使应用程序更具响应性,因为轮询文本框不会浪费时间。罗兰,我认为只有在用户停止键入一段时间后,才需要轮询浏览器中的鼠标粘贴或编辑->撤消。subjectivecheck()仅当用户停止键入一段时间时才需要。但是如果用户继续键入?我只想在用户停止键入时检查值,但是如果用户继续键入?我只想在用户停止键入时检查值
$(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);
}); 
});