javascript - 在按下某个字符后调用函数,但前提是手前有空格

标签 javascript events event-handling dom-events

我想在有人输入 @ 符号后调用一个函数,并且只有当它前面没有字符,而且 @ 符号是textarea 中写入的第一个字符也运行该函数。

现在我知道在 JS 中有 onkeypress 事件并且我知道 @ 符号 unicode 字符是 64

所以我可以这样写一个函数

keyPress(event) {
   if (event.keyCode === 64) {
      // Do Something
   }
}

但是我如何检测 @ 符号之前是否有字符,我只是想知道这个 keyPress 事件是否会在移动设备上正常工作?

只是为了澄清这是在 textarea 中使用的,我已经看到您可以使用正则表达式,但显然它不适用于所有浏览器?我需要它适用于所有浏览器和移动设备。

这也必须在同一个 textarea 中运行多次,如果 @ 符号是第一个键入的字符,则也运行该函数。

如有任何帮助,我们将不胜感激!

最佳答案

一个相当合理的解决方案是监听按键事件,如果字符是空格则设置一个 bool 标志,如果字符是 @ 则运行你的函数并且设置标志表明前一个字符是一个空格,如果字符是其他任何字符,则重置标志。

继续你的例子:

let hasSpace = false;
keyPress(event) {
    if(event.keyCode === 32 || event.keyCode === 160) {
        hasSpace = true;
    } else if(event.keyCode === 64 && hasSpace) {
        hasSpace = false;
        // Do something, the previous character was a space
    } else {
        hasSpace = false;
    }
}

这将保证 //Do something 处的代码只有在当前字符是 @ 前一个字符时才会运行是一个空间。请注意,我同时使用了 32160 作为空间,因为有两种类型的空间需要考虑,中断和非中断。

关于javascript - 在按下某个字符后调用函数,但前提是手前有空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51354375/

相关文章:

javascript - 将转义字符串传递给 JQuery($)-Function

javascript - 当执行另一个函数时,Jquery 触发函数

javascript - 动态创建的元素上的事件绑定(bind)?

jQuery .on() 双击传递数据

javascript - 事件捕获与使用 contentEditable div 冒泡

Javascript 通过解构重新分配 let 变量

javascript - 如果我们有视频链接,如何获取YouTube视频标题

javascript - 延迟加载 Javascript 以加速我的 Joomla

c++ - 在 QML 上下文中处理 Qt C++ 事件

jquery - 音频事件不会触发 jQuery on play 事件