如何钩入客户端“键入单词”事件的建议。

3

我正在做一个项目,希望在以下两种情况下触发一个事件(客户端JavaScript):

  • 用户完成单词输入,例如:“stack”(触发req #1事件,单词为“stack”)
  • 2秒钟时间到了,这将处理“最后一个单词”。 (例如:没有空格)

因此,总结一下,以下是我输入时的触发方式:

"Stack "(触发req #1事件,“Stack”)

"Overflow "(触发req #1事件,“Overflow”)

" Rocks"(触发req #3事件,“Rocks”)

希望这样说得清楚明白。

那么,首先我想到的是需要挂接到 .keypress() 事件(我使用jQuery),然后进行一些字符串操作(例如查找空格等)。

这就是全部吗?还是有什么其他方法(例如已经完成这项工作的“扩展” .keypress() 处理程序)?


你应该考虑在按下空格键后等待500毫秒再触发,以确定这种方式是否更加用户友好(例如悬停意图)。当然,你还应该检查他们是否按下了双倍空格,或者使用空单词进行触发是否可以。不确定等待2秒是否重要,只需使用onblur即可。 - davin
@davin - 是的,当然,我会进行实验。只是想寻求一般性建议,关于如何处理这个问题,例如要连接哪些jQuery事件(keypress、keydown、keyup等)。 - RPM1984
2个回答

0

我会:

  • 注册输入键盘按键事件 $("input").bind("keyup", function(e){ });
  • 检查按下的键是否是空格键 if(e.keyCode == 32)
  • 如果是,从输入中获取最后一个单词 $("body").trigger('input_update', { last-word: false, word: $(this).val()).replace(/[\s-]+$/,'').split(/[\s-]/).pop() });

对于2秒计时器,只需在页面准备就绪时启动计时器,并在每次输入键盘按键事件触发时重置它。当达到2秒时,执行的函数应该像这样:function(){ $("body").trigger('input_update', { last-word: true, word: $(this).val()).replace(/[\s-]+$/,'').split(/[\s-]/).pop() }); }

在所有这些之前,注册您的自定义事件:$("body").bind("input_update", function(e, data){ // do your stuff with the last word });

代码可能不是100%正确,因为我很累了,但你明白了。


不,我真的不太明白...我的意思是,我理解这个想法,但不确定如何将所有这些代码块组合成可行的 JavaScript 代码。 - RPM1984

0

我不知道是否已经有类似的东西了,但是有一种简单的方法可以解决它,可以查看this fiddle


谢谢,但是也许你可以提供一些关于你的解决方案的信息吗?(例如它是如何工作的) - RPM1984
基本上,它比较用户在更改值之前和之后的单词集。当他或她放开键盘('keyup'超时)时,您可以通过单词(拆分)或任何需要检查的令牌来检查已更改的内容,并根据自己的需求使用它。 - Leonid
关于空格:setTimeout的第二个参数可以更改为e.keyCode == 32? 0 : 500 - Leonid

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接