2011-12-30 91 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);