2012-01-31 74 views
1

下面是我的代碼,用於驗證空白或包含5個字符或更少的textareas。如果一個textarea爲空或少於5個字符,則不顯示警告

function validation() { 

       var context = $('#optionAndAnswer'); 
    var currenttotal = context.find('.answerBtnsOn').length;  

    alertValidation= ""; 
     // Note, this is just so it's declared... 

    var textAreaO = $(".textAreaQuestion"); 

    if (textAreaO.val() == ""){ 
     alertValidation += "\nYou have not entered a valid Question\n"; 
    } else if (textAreaO.val().length < 5){ 
     alertValidation += "\nYou have not entered a valid Question\n"; 
    } 


    if(alertValidation != "") 
    { 
     alert(alertValidation); 
     return false; 
    } 

    return true; 
} 

的問題是,可以說我有2個文本域相同類別(.textAreaQuestion),那麼如果兩個文本域的一個一個爲空或小於5個字符,那麼就沒有驗證(無警報出現)這是不正確的,因爲它應該出現。它只在兩個textareas都是空的或少於5個字符時出現。那麼如何處理這段代碼,以便如果textarea中有一個文本區域是空的或少於5個字符,那麼顯示警報?

感謝

+0

謝謝您的回答大家,當我到達的15聲譽,我將給予好評所有的答案,因爲所有的答案看起來是正確的 – user1180490 2012-01-31 14:32:26

回答

0

.val()方法返回第一個匹配元素的值:

說明:獲取的第一元件的電流值在匹配元素集合中。

您應該遍歷匹配的元素以分別處理它們。事情是這樣的:

$(".textAreaQuestion").each(function() { 
    if (!this.value || this.value.length < 5) { 
     alertValidation += "\nYou have not entered a valid Question\n"; 
    } 
}); 

DEMO

0

如果您選擇一個以上的元素調用.val()將用於匹配第一元素只返回的值相匹配。如果要驗證所有這些元素,則需要使用.each()函數遍歷所有元素。

+0

所以我只加'$(」 textAreaQuestion 「).each(function(){'if語句之上?' – user1180490 2012-01-31 14:26:02

+0

本質上,是的 - 儘管您可以執行'textAreaOeach(...)',因爲您已將選擇器的結果保存到該變量中。剩下的代碼還有其他幾點:在alertValidation的初始聲明中沒有'var'關鍵字,但我不認爲它是全局的。你的'if/else if'狀態因爲在兩種情況下執行的代碼都是相同的,所以可以將它們壓縮成一個具有OR條件的if語句。 – 2012-01-31 14:30:39

0

你需要使用each在你.textAreaQuestion迭代:

var textAreaO = $(".textAreaQuestion"); 

textAreaO.each(function() { 
  if ($(this).val() == ""){ 
    alertValidation += "\nYou have not entered a valid Question\n"; 
    } else if ($(this).val().length < 5){ 
      alertValidation += "\nYou have not entered a valid Question\n"; 
    } 
}); 
//... 
相關問題