【发布时间】:2016-08-15 07:35:06
【问题描述】:
我有以下代码,我试图检查用户的输入是否在我设置的可接受字符中。
代码:
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;
};
示例:
[Working]:如果 self.acceptedChars = /[a-z]/,那么一切都会按预期运行,产生以下结果:
- 输入:
ad12s - 输出:
ads
[NOT Working]:如果 self.acceptedChars = "abc",那么即使除了 'a'、@987654327 之外的所有字符@ 和 'c' 将被识别为不被接受,由于某种原因它们仍然可以输入。
- 输入:
aabb12 - 输出:
aabb12 - 应该是:
aabb
注意:自定义事件success和error用于根据@987654334显示不同的消息@ 和 isAccepted 条件和发生的问题无关。
基本上我的问题是当 acceptedChars 是字符串时,return false 不会阻止字符出现。我该如何解决这个问题?
【问题讨论】:
-
键前的波浪号有什么作用?
~key.indexOf -
在这种情况下,它将
!= -1变为>= 0@TamasRev -
@TamasRev 它将 -1 转换为 falsy (0),而其他值则为真。
标签: javascript html string