【问题标题】:jQuery: How to check if a value exists in an array?jQuery:如何检查数组中是否存在值?
【发布时间】:2010-05-21 00:15:00
【问题描述】:

我现在正在尝试编写一个简单的输入字段验证插件(实际上更像是一个学习练习)并认为这不会太难,因为我应该做的就是:

  1. 获取输入字段
  2. 将它们存储在数组中 价值
  3. 在提交表单时检查是否为数组 包含任何空字符串

但我似乎无法在我的数组中编写检查空字符串 (读取:输入,其中没有文本) 的内容。

这是我目前的代码:

var form = $(this), // passed in form element
    inputs = form.find('input'), // all of this forms input fields
    isValid = false; // initially set the form to not be valid


function validate() {
    var fields = inputs.serializeArray(); // make an array out of input fields

    // start -- this does not work
    for (var n in fields) {
        if (fields[n].value == "") {
            isValid = false;
            console.log('failed');
        } else {
            isValid = true;
            console.log('passed');
        };
    }
    // end -- this does not work

}; // close validate()

// TRIGGERS
inputs.live('keyup blur', function(event) {
    validate();
});

任何有关如何检查其中一个字段是否为空白以及如果是则返回isValid = false 的帮助将不胜感激。

我也玩过$.inArray("", fields),但即使console.log 显示字段没有值,它也永远不会返回0 或1。

感谢阅读。

【问题讨论】:

  • 作为一个侧面观察,当任何个输入字段发生变化时,是否有必要查看所有个输入字段?难道您不想重新验证已更改的输入吗?此外,如果您想包含<select><textarea>,您可能希望:input 而不是input 作为您的选择器。
  • 如果您使用 jQuery,请搜索 API 并查看可以使用哪些快捷方式。您可以使用$.each,而不是使用for..in 循环。您可以使用$(variable).val() 而不是variable.value。基本上,使用 jQuery 或摆脱它,否则如果您在直接 JS 和 jQuery JS 之间切换,代码的可读性会急剧下降。 (我保证,你最终会感谢自己的。)
  • 我昨天在ajgraham.com/2010/05/simple-but-powerful-jquery-form-validation/…写了类似的东西,如果你想比较方法,有很多交叉
  • for..in 是个坏主意。它用于枚举对象的属性。应该使用常规的 for 循环来迭代数组值,或者 jquery 提供的 $.each
  • 感谢大家的cmets!他们非常有帮助。我现在决定使用 jQuery 提供的$.each,它工作得很好。再次感谢。

标签: javascript jquery validation arrays


【解决方案1】:

如果您正在寻找更多 jQuery 风格的语法,您可以使用以下方法替换您的 for 循环:

var isValid = true;  // default to valid

$.each(fields, function(i, field){
    if(field.value == '') {
        console.log('failed');   
        isValid = false; 
    } else {
        console.log('passed');
    }
});

【讨论】:

    【解决方案2】:

    如果第一个字段为空,而第二个字段不是,您将用这种方式覆盖 isValid 变量。获得第一个空变量后,您可以break; for 循环。

    【讨论】:

    • 很好的答案。很有道理。
    • 让它像我想要的那样工作。谢谢。但最终我觉得$.each 方法可能是更好的方法,因为这是一个jQuery“插件”。不过谢谢,肯定学到了很多。
    【解决方案3】:

    您可以用更简单的检查替换整个 validate 函数:

    function validate() {
        var blankInputs = inputs.filter(function() {
            return this.value === ''; 
        });
    
        isValid = blankInputs.length === 0; // If there are none, the form is valid
    
    } // close validate()
    

    请注意使用严格相等运算符===。几乎总是使用它而不是== 是一种很好的做法,但对于那些表现虚假的值尤其如此(当你说if (value) 时评估为false)。 == 在这些情况下会给你一些非常意想不到的行为。

    【讨论】:

      猜你喜欢
      • 2016-06-13
      • 2011-12-14
      • 1970-01-01
      • 2011-06-30
      • 2011-01-27
      • 2012-02-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多