【问题标题】:How can I call a function after a person stops typing?一个人停止打字后如何调用函数?
【发布时间】:2012-06-25 17:36:09
【问题描述】:

我在一个 HTML 页面上有一个输入,一个人会在其中输入一些东西,而我想要的是在他们每次停止输入时调用一个函数。我知道 onkeypress 事件,但每次输入字符时都会调用它。这是我想要的一个例子:

  1. 人员在输入中键入“这是一个测试”
  2. 在用户停止输入后,应该调用函数 foo()
  3. 用户在输入中键入其他内容
  4. 在用户停止输入后,应该调用函数 foo()
  5. 重复....

这可能吗?

非常感谢!

【问题讨论】:

  • 定义“人停止打字”...
  • 你可以处理mouseup失去焦点事件。但不是人停止打字
  • @Oded - 他们输入“这是一个测试”,然后停止按键盘上的键。所以应该会有第二次延迟。
  • 一秒钟?如果他们在想?还是去另一个房间找东西?

标签: javascript html


【解决方案1】:

监听 onkeyupevent。开始超时(您必须将“停止”定义为某个时间量,否则它将在每次按键时调用),并在超时时执行您的函数。

如果在计时器运行时调用了 onkeydown,请将其停止。

类似...

var timer;

function onKeyUpHandler(e){
    timer = setTimeout("foo()", 500)    
}

function onKeyDownHandler(e) {
    clearTimeout(timer);
}

这段代码的具体外观取决于您在何处以及如何使用它...只是为了说明如何使用它。

【讨论】:

  • Ixx - 谢谢,这很好,但我似乎无法让它工作:jsfiddle.net/j35ba
  • 啊,函数名写错了!因为调用它们的函数具有相同的名称,所以它们再次调用它们,直到出现堆栈超出错误。更改函数的名称。
  • 另外一件事是jsfiddle似乎没有在html之前声明javascript视图的内容,所以它没有找到功能。试试这个,它有效:jsfiddle.net/j35ba/11
【解决方案2】:

只需设置一个 JavaScript 计时器即可在 onKeyPress 上启动/重新启动。然后只需定义定义“停止输入”的时间长度并运行您的脚本。

【讨论】:

    【解决方案3】:

    首先,捕获“key up”事件,并将“stoppedTyping”变量设置为 true。然后设置一个计时器(在将其视为“停止输入”事件之前要等待多长时间)。

    如果在计时器关闭之前,您捕获了“按键按下”事件,请设置“stoppedTyping=false”

    当计时器到期时,您的计时器回调可以检查“stoppedTyping”的值。如果它是真的,那么用户已经停止输入(或者更准确地说,在你的计时器期间没有输入任何新字符)。如果它是假的,那么他们并没有停止输入——当你的计时器运行时,他们必须至少再输入一个字符。

    【讨论】:

      【解决方案4】:

      如果我理解得很好,“停止打字”是指“在一定时间内没有击键”。 在这种情况下,您必须使用计时器:http://jsfiddle.net/xnghR/1/

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多