jQuery:如何检查数组中是否存在值?

时间:2010-05-21 00:15:01

标签: javascript jquery validation arrays

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

  1. 获取输入字段
  2. 将它们存储在每个阵列中 值
  3. 提交表单检查是否为数组 包含任何空字符串
  4. 但我似乎没有写一些东西来检查我的数组中的空字符串(读取:内部没有文本的输入)

    这是我到目前为止的代码:

    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。

    感谢阅读。

3 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:4)

如果您正在寻找更多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 :(得分:0)

您可以使用更简单的检查来替换整个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)尤其如此。在这些情况下,==会给你一些非常意外的行为。