2011-12-30 40 views
0

如何比較多個輸入相同的形式,如果他們都具有相同的值?我需要檢查它們是否都具有相同的價值。jQuery:如何比較多個輸入

<input type="text" class="inputclass"/> 
<input type="text" class="inputclass"/> 
<input type="text" class="inputclass"/> 
<input type="text" class="inputclass"/> 
<input type="text" class="inputclass"/> 
.... 
+1

你想知道,如果他們都*** ***具有相同的價值?或者如果他們中的任何一個具有相同的值? – 2011-12-30 00:58:23

+0

如果它們全都具有相同的值,它必須檢查所有輸入。 – user759235 2011-12-30 01:02:09

+0

輸入類是輸入類的非常多餘的名稱(非常冗餘,因爲它太冗餘了)。你可能應該避免命名每一個,爲什麼這些不能簡單地輸入文本類型? – Incognito 2011-12-30 02:59:29

回答

5

試試這個:

var arr = $("input.inputclass").map(function(){ 
    return $(this).val(); 
}).toArray(); 

var allHaveSameValue = $.unique(arr).length == 1; 

這裏是jsfiddle.net http://jsfiddle.net/epignosisx/jzWUA/4/

UPDATE ======

由於@Anurag指出,$ .unique是僅適用於DOM元素。這裏有一個不同的實現:

function uniqueArray(arr){ 
    return $.grep(arr,function(v,k){ 
     return $.inArray(v,arr) === k; 
    }); 
} 

var arr = $(".inputclass").map(function(){ 
    return $(this).val(); 
}).toArray(); 
var allHaveSameValue = uniqueArray(arr).length == 1; 

基本上使用一個真正返回唯一數組的函數。

+0

整潔乾淨,並很好地利用收集操作。 – Anurag 2011-12-30 01:03:54

+0

@Esailija - 這種解決方案基本上是合理的,但在當前狀態下不起作用。問題在於取消數組或刪除重複項。 jQuery的獨特方法只接受DOM節點數組,並且不適用於其他類型的對象。另外,**假設**唯一適用於所有類型的數組,您需要在與'1'進行比較之前調用'.length'來獲取數組中唯一元素的數量。 – Anurag 2011-12-30 01:16:25

+0

好的測試'.length'是有道理的,我認爲你有'=='比較數字和數組的一些魔法巫術:P(原來是'$ .unique(arr)== 1')它仍然做得太多了儘管工作..你只需要通過'.every'循環收集一次 – Esailija 2011-12-30 01:17:22

0
function hasSameValue() { 
    var sameValue = true, formVal = $('.inputclass').first().val(); 
    $('.inputclass').each(function(){ 
    sameValue = sameValue && (formVal === $(this).val()); 
    if (!sameValue) { return false; } 
    }); 
    return sameValue; 
} 
1

這應該做的伎倆http://jsfiddle.net/EpYTh/

var firstInput = $(".inputclass").eq(0).val(); 
var equalField = true; 
$(".inputclass").each(function(){ 

    if($(this).val() != firstInput){ 
     equalField = false; 
    } 
}); 


alert(equalField);