2015-12-03 40 views
1

我在我的表單上有2個地址條目。我還有2個單選按鈕來指定「首選」郵寄地址。驗證無線電條目

我試圖驗證這兩個,我真的不知道如果我做得正確。它似乎工作,如果我有兩個地址填充,但我似乎無法使其驗證正確,如果其中一個地址未填寫。

下面是做驗證的JavaScript:

function checkMailingPrefs() { 
    var prefs = ["MailPrefHome", "MailPrefBusi"]; 
    var field = ["HomeAddress1", "BusinessAddress1"]; 
    for (i = 0; i < 2; i++) { 
     if ($("#"+prefs[i]).is(":checked") && $("#"+field[i]).val() == "") { 
      $("#" + prefs[i]).prop('checked', false); 
      $("#MailPrefBusi").validationEngine('showPrompt', 'You must select the correct Mailing Preference', 'error', true); 
      return false; 
     } 
     if ($("#"+field[i]).val() == "" || !$("#"+prefs[i]).is(":checked")) { 
      $("#MailPrefBusi").validationEngine({promptPosition : "bottomRight", scroll: true}).validationEngine('showPrompt', 'You must select the correct Mailing Preference', 'error', true); 
      return false; 
     } 
    } 
    return true; 
} 

我使用jQueryValidationEngine,但它也沒有正確地驗證他們。我只用它來顯示這些字段的驗證錯誤。

下面是標準:

如果MailPrefBusi被選中,那麼BusinessAddress1必須在充滿 如果MailPrefHome被選中,那麼HomeAddress1必須在充滿

如果沒有MailPrefxxx是。檢查,顯示錯誤。如果沒有填寫xxxAddress1,則顯示錯誤。

+0

你明確地驗證'$(「#MailPrefBusi」)validationEngine'內循環。你想要驗證家庭住址嗎?例如'$(「#」+ field [i])。validationEngine'? –

回答

0

看起來像你的第二條語句if ($("#"+field[i]).val() == "" || !$("#"+prefs[i]).is(":checked")) {在你不需要時返回false。你應該能夠完成你想要使用這個東西:

function checkMailingPrefs() { 
    var prefs = ["MailPrefHome", "MailPrefBusi"]; 
    var field = ["HomeAddress1", "BusinessAddress1"]; 
    for (i = 0; i < 2; i++) { 
     if ($("#"+prefs[i]).is(":checked") && $("#"+field[i]).val() == "") { 
      // enhanced validation function call here 
      return false; 
     } 
    } 
    //if the user hasnt checked anything, you can remove this if the form should validate without the user having to set a radio button 
    if(!$("#MailPrefBusi, #MailPrefHome").is(":checked")) { 
     // enhanced validation function call here 
     return false 
    } 
    return true; 
} 

你可以看到它在這方面的工作JS小提琴:https://jsfiddle.net/h0vj9r35/

希望幫助!

+0

雖然我選擇了這個,但是因爲我喜歡我們的工作代碼。這一個也有問題。它允許選擇兩個無線電。 – MB34

+0

@ MB34只要單選按鈕被賦予相同的名稱,瀏覽器將只強制執行1個單選按鈕。你可以在JS小提琴中看到我在更新的HTML中討論的內容:https://jsfiddle.net/h0vj9r35/7/ –

+0

你的小提琴沒有證明這一點。 – MB34

0

如果您試圖根據複選框值填寫相應的字段,您是否有n沒有的場景。複選框和領域,並想避免值的硬編碼,可以使用以下命令:

var prefs = ["MailPrefHome", "MailPrefBusi"]; 
var field = ["HomeAddress1", "BusinessAddress1"]; 
var allEmpty = false; 
var valueError = "" 
for (i = 0; i < 2; i++) 
{ 
    if ($("#"+field[i]).val() == "" || !$("#"+prefs[i]).is(":checked")) { 
     if(!$("#"+prefs[i]).is(":checked")) 
      valueError += prefs[i] + "," ; 
     else if($("#"+field[i]).val() == "") 
      valueError += field[i]; 
     allEmpty = true;    
    }  

    if ($("#"+prefs[i]).is(":checked") && $("#"+field[i]).val() == "") 
    { 
     $("#" + prefs[i]).prop('checked', false); 
     allEmpty = false; 
     alert("Need to enter " + field[i]); 
     return false; 
    }  

    if((i == 1) && allEmpty) 
    { 
     alert("You need to select " + valueError); 
     return false; 
    } 
} 
return true; 

http://jsfiddle.net/n0303qd6/1/

+0

如果沒有選中,則輸入或選擇值,如果兩個框均爲空,我們確實允許它們沒有。 – MB34

+0

已更新的代碼和小提琴來處理 – DinoMyte

+0

相同的問題'您需要選擇MailPrefHome,MailPrefBusi,' – MB34