【问题标题】:How can a javascript function be fired when a user types text into an input field or pastes text into it?当用户在输入字段中键入文本或将文本粘贴到其中时,如何触发 javascript 函数?
【发布时间】:2010-01-05 08:29:03
【问题描述】:
$(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);
}); 
});

有问题。当用户将文本粘贴到输入字段中时,无法触发上述函数。如何解决这个问题?

【问题讨论】:

  • subjectivecheck() 仅在用户停止输入一段时间后才需要。

标签: javascript jquery input


【解决方案1】:

onchange 事件是您想要的。它在文本框失去焦点(模糊)并且自获得焦点后其值发生更改时触发。它可以解决粘贴问题。

所以不要使用.live('keyup',,而是使用live('change'

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

【讨论】:

  • 但是如果用户一直在打字呢?我只想在用户停止输入时检查值
【解决方案2】:

粘贴 (onpaste) 事件不是标准的 - 只有 Internet Explorer 支持 AFAIK(请参阅:http://msdn.microsoft.com/en-us/library/ms536955(VS.85).aspx

change (onchangehandlder) 事件是标准的 - 但只有当文本框的值在获得和失去焦点之间发生变化时才会触发 - i.o.w.检测变化需要文本框失去焦点。

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

【讨论】:

  • 我只想在用户停止输入时检查用户输入。
  • 在这种情况下,onchange 可能就是你想要的。
  • 不,但是如果文本框没有失去焦点但用户停止输入怎么办。例如,用户停止输入,但输入光标仍在文本框中?
  • 你可以在检测到按键时清除当前超时,当然也可以设置一个新的。这样,您可以防止过早的更改检测。此外,您可以仅在 ttextbox 获得焦点后开始添加间隔,并在发生模糊事件时将其清除。这将使应用程序更具响应性,因为不会浪费时间轮询文本框。
  • Roland,我认为轮询对于鼠标粘贴或编辑->在浏览器中撤消是必要的
【解决方案3】:

在字段的 onfocus 事件中,你可以启动一个计时器来检查字段值是否发生了变化。

在 onblur 时,清除那个计时器。

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

【讨论】:

    【解决方案4】:

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

    如果您想比onchange更快地获知表单字段的所有更改,恐怕别无选择,只能在轮询setInterval中不断监视元素的value

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-08-03
      • 2015-05-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多