0

如果可能的话,任何人都可以指出如何缩短此代码的方向吗?

if($(".row-member0").is(":visible")){
    if($("#TeamMember_0_name").val()==="") i=false;
    if($("#TeamMember_0_email").val()==="") i=false;
    if($("#TeamMember_0_phone").val()==="")i=false;
    if($("#TeamMember_0_birthdate").val()==="") i=false;
    if( !validateEmail($("#TeamMember_0_email").val())) { 
        i=false;
    }    
}

if($(".row-member1").is(":visible")) {
    if($("#TeamMember_1_name").val()==="") i=false;
    if($("#TeamMember_1_email").val()==="") i=false;
    if($("#TeamMember_1_phone").val()==="") i=false;
    if($("#TeamMember_1_birthdate").val()==="") i=false;
    if( !validateEmail($("#TeamMember_1_email").val())) { 
            i=false;
    }
}

if($(".row-member2").is(":visible")) {
    if($("#TeamMember_2_name").val()==="") i=false;
    if($("#TeamMember_2_email").val()==="") i=false;
    if($("#TeamMember_2_phone").val()==="") i=false;
    if($("#TeamMember_2_birthdate").val()==="") i=false;
    if( !validateEmail($("#TeamMember_2_email").val())) { 
        i=false;
    }
}

我知道也许应该使用交互。只是不确定如何。

我想:

1)在顶部元素上放置一个 .row-member 类,然后:

$('.row-member input').each(
    function(index, value) {
        if($(this).val()==="") i=false; 
    }
);

我可以帮忙吗?

4

3 回答 3

5

您可以使用StartsWith选择器和each()来遍历您的类:

$("[class^='row-member']").each(function(index) {
    if($("#TeamMember_" + index + "_name").val()==="" || $("#TeamMember_" + index + "_email").val()==="" || $("#TeamMember_" + index + "_phone").val()==="" || $("#TeamMember_" + index + "_birthdate").val()==="" ||  !validateEmail($("#TeamMember_" + index + "_email").val())) { 
        i=false;
    } 
});
于 2013-04-21T17:38:56.940 回答
1

我建议使用通用类而不是唯一类。这就是 ID 的用途。

如果你这样做,那么它可以像这样缩短:

i = $(".row-member:visible input").toArray()
                                  .every(function(el) {
                                       return el.value !== "";
                                   });

你需要一个补丁.every()


如果您不想 patch .every(),那么您可以像这样使用 jQuery 来完成:

$(".row-member:visible input").each(function(_, el) {
                                        if (el.value === "") {
                                            i = false;
                                            return false; // to short circuit 
                                        }
                                    });

或者,假设i开始了true,你可以这样做:

$(".row-member:visible input").each(function(_, el) {
                                        return i = (el.value !== "");
                                    });

所有这三种技术都提供了短路功能,因此您无需在找到第一个空值后保留测试值。

于 2013-04-21T17:32:36.403 回答
1
if($(".row-member0").is(":visible")){
    if($("#TeamMember_0_name").val()==="" || $("#TeamMember_0_email").val()==="" || $("#TeamMember_0_phone").val()==="" || $("#TeamMember_0_birthdate").val()==="" ||  !validateEmail($("#TeamMember_0_email").val())) { 
        i=false;
    }    
}

休息时做同样的事情

于 2013-04-21T17:34:24.887 回答