2011-06-08 99 views
6

我有一個有文本框的網頁。檢查數組中的所有值是否相同

當用戶輸入信息到它,它使一個AJAX調用,看看是否條目是有效的,如果不是禁用按鈕。

他們還可以添加最多10個文本框,這是通過jQuery模板來完成。目前,每個文本框都有一系列的串行文本框,當一個串行文本框模糊時,它會執行此檢查。

如果他們進入一個無效的序列將禁用按鈕,但如果他們添加一個新的文本框,這是有效的按鈕現在已啓用這是錯誤的,因爲有一個仍然無效。

我能想到這樣做的唯一的方法是一個1或0添加到每個文本框和一個數組一次陣列中的所有元素都是1,那麼啓用按鈕。這是一個好方法,如果不是請解釋一個更好的方法。如果這是一個好辦法,我該如何檢查一個JavaScript數組中的所有值是否一樣?

感謝

+0

你能說清楚'當連續文本框** **模糊**'是什麼意思嗎? – 2011-06-08 10:44:05

+0

@Charles當模糊事件在該文本框中被觸發時... – 2011-06-08 10:44:34

+0

是的,我認爲將0 1設置爲檢查每個文本框的狀態並且必須循環javascript數組才能找出哪一個是0或1 – 2011-06-08 10:45:51

回答

2

我會假設你有一個isValid(str)函數返回一個布爾值。

由於您使用jQuery的,你可以把jQuery的filter()功能的優勢,輕鬆地檢查是否有輸入無效每當輸入模糊

$('.serial').live('blur', function() { 

    // Get an array of all invalid inputs 
    var invalids = $('.serial').filter(function() { 
     return !isValid($(this).val()); 
    }); 

    // Does the array contain anything? 
    $('#button').prop('disabled', invalids.length); 

}); 

演示:http://jsfiddle.net/3RNV6/


類似的概念,但爲使用AJAX:

$('.serial').live('blur', function() { 
    var me = this; 

    $.ajax({ 
     // ajax config 
     success: function (data) { 
      if (data === 'Y') $(me).addClass('valid'); 

      // Get an array of all invalid inputs 
      var invalids = $('.serial').filter(function() { 
       return !$(this).hasClass('valid'); 
      }); 

      // Enable if none invalid 
      if (invalids.length === 0) $('#button').prop('disabled', false); 
     } 
    }); 
}); 

$('.serial').live('keypress', function() { 
    $('#button').prop('disabled', true); 
    $(this).removeClass('valid'); 
});   
+0

問題是我沒有檢查文本框客戶端的值,我只知道它的有效性來自我的AJAX請求的響應,所以我擁有的是Y或N – Jon 2011-06-08 10:59:04

+0

@Jon,對不起,我錯過了AJAX要求。在這種情況下,您必須禁用'change'和'removeClass('valid')'按鈕。當AJAX請求返回時,還會將'addClass('valid')'添加到輸入中。一旦你這樣做,只需從過濾函數中返回$(this).hasClass('valid')'。 – 2011-06-08 11:03:02

+0

如何獲取引用成功方法中的AJAX調用來執行addClass(「有效」)的文本框? – Jon 2011-06-08 11:36:45

0

首先,如果您動態創建n個文本框,您應該使用jQuery的live()或delegate()方法來通知添加的新DOM元素。

其次你的做法是得很好,但不是一個數組,你可以設置的與錯誤的文字輸入PARAM,然後禁用按鈕,如果有錯誤與文本的任何元素。我認爲它會比循環所有文本框都快。

4

這聽起來很不錯。您可以使用這個簡單的javascript函數檢查javascript數組中的相等元素。您可以將其粘貼到螢火蟲控制檯以檢查其功能。

// check if all elements of my_array are equal, my_array needs to be an array 
function check_for_equal_array_elements(my_array){ 
    if (my_array.length == 1 || my_array.length == 0) { 
    return true; 
    } 
    for (i=0;i<my_array.length;i++){ 
    if (i > 0 && my_array[i] != my_array[i-1]) { 
     return false; 
    } 
    } 
    return true; 
} 

//Example: 
var my_array = []; 
my_array.push(5); 
my_array.push(5); 

// will alert "true" 
alert("all elements equal? "+check_for_equal_array_elements(my_array)); 

my_array.push(6); 
// will alert "false" 
alert("all elements equal? "+check_for_equal_array_elements(my_array)); 
+0

純粹的JavaScript和邏輯+1。 – alix 2013-04-25 14:18:03

0

我會使用驗證,以實現這一目標。

http://docs.jquery.com/Plugins/Validation#Demos

如果你能極大驗證客戶端 - 無論是使用中的鏈接上面顯示的現有jQuery驗證功能中的一個,或自己編寫。

如果您必須通過ajax驗證服務器端,那麼您可以將其構建到自定義驗證例程中。

然後在顯示/隱藏按鈕的調用中 - 調用$('#formid).validate() - 如果任何驗證失敗,則返回false。

相關問題