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
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 に答える
1

独自のクラスではなく、共通のクラスを使用することをお勧めします。そのための ID です。

これを行うと、次のように短縮できます。

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

のパッチが必要です.every()


パッチを適用したくない場合は.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 !== "");
                                    });

これら 3 つの手法はすべてショート サーキットを提供するため、最初の空の値が見つかった後も値をテストし続ける必要はありません。

于 2013-04-21T17:32:36.403 に答える