javascript - 当根据字符串检查输入时,“返回 false”不会阻止字符出现

标签 javascript html string

我有以下代码,我试图检查用户的输入是否在我设置的可接受的字符范围内。

代码:

element.onkeypress = function (e) {
    var
        key = String.fromCharCode(e.which),
        isAccepted = (typeof self.acceptedChars === "object") ?
            self.acceptedChars.test(key) : /* Check for RegEx */
            ~self.acceptedChars.indexOf(key), /* Check for String */
        isMaxOrLess = self.maxLength > this.value.length;
    if (isAccepted && isMaxOrLess) element.dispatchEvent(success);
    else if (!isAccepted && isMaxOrLess) element.dispatchEvent(error);
    return isAccepted && isMaxOrLess;
};

示例:

[工作]:如果 self.acceptedChars = /[a-z]/ ,那么一切都会按预期运行,产生以下结果:

  • 输入:ad12s
  • 输出: ads

[不工作]:如果 self.acceptedChars = "abc" ,那么即使除了 'a' 之外的所有字符, 'b' 'c' 将被视为不接受,但出于某种原因,它们仍然可以输入。

  • 输入:aabb12
  • 输出: aabb12
  • 应该是: aabb

注意:自定义事件success error 用于根据 isMaxOrLess 显示不同的消息 isAccepted 条件与发生的问题无关。

本质上我的问题是 return false 不会阻止字符在 acceptedChars 时出现。 是一个字符串。我该如何解决这个问题?

最佳答案

应该是的。 Demo .

!!~self.acceptedChars.indexOf(key), /* Check for String */

不是

~key.indexOf(self.acceptedChars), /* Check for String */

UPD 您需要将值转换为 bool 值。不仅仅是让它变得虚假

所以最好少用criptic

self.acceptedChars.indexOf(key) >= 0, /* Check for String */

关于javascript - 当根据字符串检查输入时,“返回 false”不会阻止字符出现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38951042/

相关文章:

javascript - 为什么 javascript 无法识别我创建的 ID 标签?

html - Bootstrap 3 列内部有奇怪的空间

ruby - 将字符串截断为前 n 个单词

c++ - 就像在 python 中定义 __str__ 一样,在类上调用时如何覆盖 c++ 中的标准全局函数

javascript - 当用户尝试以 Angular 打印时,有没有办法触发功能?

javascript - MVC如何调用 Controller 的post方法

html - 如何自动调整图像大小以适合 'div' 容器?

javascript - 从文件上传 html 的 textarea 中删除模糊 | CSS | javascript

java - 如何解析计算器项目中的操作数和运算符?

JavaScript setInterval() 和 setTimeout() 卡住浏览器