【问题标题】:Checking values in this array, JQuery检查此数组中的值,JQuery
【发布时间】:2010-05-29 03:16:27
【问题描述】:

我有这个数组 (JQuery),我在其中添加了所有表单的控件,它看起来像:

var     name       = $("#name"),
        surname    = $("#surname"),
        address    = $("#address"),
        phone      = $("#phone"),
        photo      = $("#photo"),
        grade      = $("#grade"),
        profession = $("#profession"),
        email      = $('#email'),
        title      = $('#title'),

                    allFields =    $([]).add(name)
                                        .add(surname)
                                        .add(address)
                                        .add(phone)
                                        .add(photo)
                                        .add(grade)
                                        .add(profession)
                                        .add(email)
                                        .add(title)
                                        .add(grade);

我想将每个元素的值检查到“allFields”数组中

function checkingFieldsArentEmpty(){

              for (var f in allFields){
                    if(f.val() === null)
                        //if any val is null just return false
                        return false;
                }
                return true;
            }

我需要一些想法来改进最后一个功能。谢谢。

【问题讨论】:

  • 您想改进哪方面?您的有效 var 是不必要的,只需在最后返回 true。
  • f 不是已经是一个 jQuery 对象了吗? allFields[f].val() 好像错了,不应该是f.val() 吗?
  • 是的,你是对的,那是错的。

标签: jquery arrays


【解决方案1】:

试试:

var names = ["name", "surname", "address", "phone", "photo",
  "grade", "profession", "title"];
var allFields = {}
$.each(names, function(i, name) {
  allFields[name] = $("#" + name).val();
});

然后你可以这样做:

if (allFields.name) { // true if it has a value, false for ""
  ...
}

你这样做的方式有点复杂。你想要一个数组还是一个 jQuery 对象?

【讨论】:

    【解决方案2】:

    您可以将该函数替换为:

    function checkingFieldsArentEmpty(){
        return !(allFields.filter(":input[value]").length != allFields.filter(":input").length);
    }
    

    【讨论】:

    • @Felix Guerrero:来自documentation选择所有输入、文本区域、选择和按钮元素。
    • @Felix Guerrero - 我不明白,您帖子中的功能适用于 allFields 中包含的所有元素。
    • 认为 其他 Felix 认为:input 仅适用于<input> 元素。跨度>
    【解决方案3】:

    你可以使用.reduce():

    function checkingFieldsArentEmpty(){
        return allFields.reduce(function(prev, curr, index, array) {
            // for checking for emptiness just add  && cur.val() !== "" 
            return prev && curr.val() !== null; 
    
        }, true);
    }
    

    顺便说一句。使用 jQuery 创建和填充数组对我来说似乎没有必要。

    【讨论】:

      【解决方案4】:

      hasEmptyFields = !!$.grep(allFields, function(a) { return a.val() === null; }).length

      【讨论】:

        猜你喜欢
        • 2013-10-23
        • 2018-08-08
        • 1970-01-01
        • 1970-01-01
        • 2019-07-29
        • 2011-12-06
        • 2011-05-28
        • 2016-06-13
        • 2011-12-14
        相关资源
        最近更新 更多