我有以下代码,我试图检查用户的输入是否在我设置的可接受的字符范围内。
代码:
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/