如何收听特定字符的删除javascript

时间:2018-07-16 05:35:57

标签: javascript

我在寻找解决方案时遇到麻烦。.

如何监听某个字符的删除/退格

所以我知道我可以像这样监听退格事件。

function() {
    const textarea = document.querySelector('textarea');
    const backspace = 8;
    textarea.addEventListener('keydown', (event) => {
        if(event.keyCode === backspace) {
           // do something
        }
    });
}

但是我想做的是,如果我退格并且删除的字符是@-然后做点事

我该怎么做?

任何帮助将不胜感激!

谢谢

1 个答案:

答案 0 :(得分:2)

您可以获取selectionStart中的textarea来插入符号的位置,然后访问该值的索引(减一)以获取将要删除的字符:

const textarea = document.querySelector('textarea');
const backspace = 8;
textarea.addEventListener('keydown', (event) => {
  if (event.keyCode === backspace) {
    console.log('backspace');
    const { value } = textarea;
    const charToBeDeleted = value[textarea.selectionStart - 1];
    if (charToBeDeleted === '@') {
      console.log('deleting @...');
    }
  }
});
textarea {
  width: 100%;
  height: 200px;
}
<textarea></textarea>

还要确保您使用===来检查是否相等-=已分配。

如果您要检查用户是否可能通过选择删除多个字符,则还必须检查selectionEnd,并适当检查slice的值:

const textarea = document.querySelector('textarea');
const backspace = 8;
textarea.addEventListener('keydown', (event) => {
  if (event.keyCode === backspace) {
    console.log('backspace');
    const { value, selectionStart, selectionEnd } = textarea;
    const stringToBeDeleted =
      selectionStart === selectionEnd
      ? value[selectionStart - 1]
      : value.slice(selectionStart, selectionEnd);
    
    console.log(stringToBeDeleted);
    
    if (stringToBeDeleted.includes('@')) {
      console.log('deleting @...');
    }
  }
});
textarea {
  width: 100%;
  height: 200px;
}
<textarea></textarea>