【问题标题】:'Return false' doesn't stop characters from appearing when input is checked against string'Return false' 不会阻止在针对字符串检查输入时出现字符
【发布时间】: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

注意:自定义事件successerror用于根据@987654334显示不同的消息@isAccepted 条件和发生的问题无关。

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

【问题讨论】:

  • 键前的波浪号有什么作用? ~key.indexOf
  • 在这种情况下,它将 != -1 变为 >= 0 @TamasRev
  • @TamasRev 它将 -1 转换为 falsy (0),而其他值则为真。

标签: javascript html string


【解决方案1】:

应该是的。 Demo.

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

没有

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

UPD 您需要将值转换为布尔值。不只是让它虚假

所以最好少用一些 criptic

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

【讨论】:

  • @AngelPolitis 我已经更新了答案。您需要将返回值转换为布尔值。
  • 不,对我来说越神秘越好。我会坚持 !!~。谢谢@Yury
【解决方案2】:

这应该可行:

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) === -1 ? false : true, /* 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 是字符串,您应该返回真/假值。

【讨论】:

  • 我相信您的解决方案也可以,但是为什么要为这么简单的事情使用第二个三元呢?
猜你喜欢
  • 2016-07-28
  • 1970-01-01
  • 2013-08-14
  • 1970-01-01
  • 1970-01-01
  • 2020-02-11
  • 1970-01-01
  • 1970-01-01
  • 2022-01-08
相关资源
最近更新 更多