2013-04-21 62 views
0

任何人都可以請我指出如何縮短這段代碼的方向,如果可能的話?Javascript新手上路 - 處理幹問題

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成員等級:

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

我能有一定的幫助PLZ?

回答

5

您可以使用each()一起StartsWith選擇遍歷類:

$("[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; 
    } 
}); 
+0

最後,有人提供了一個使用jQuery和高級選擇器的答案。 – 2013-04-21 17:40:59

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 !== ""); 
            }); 

所有這三種技術都提供了短路功能,因此在找到第一個空值後,不需要保留測試值。

+0

我推銷你的問題是非常有用的。請保留以備考慮。謝謝。 – MEM 2013-04-21 18:16:27

+0

不客氣。 – scram 2013-04-21 18:25:35

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; 
    }  
} 

執行相同的休息

+0

比較小,是的,但不是乾的。如果你爲其他兩個人重複這一點,那麼你就重複自己。 – 2013-04-21 17:38:37