如何使用 jQuery 比较多个输入字段值以及是否存在匹配警报“有相似的值”?
<input value="111"> //similar
<input value="222">
<input value="111"> //similar
<input value="333">
上面的 html 代码应该提醒“有相似的值”,因为它有 2 个相同的值。如何使用 jQuery 完成?
我试过(以下代码不起作用):
演示: http://jsfiddle.net/HpWLQ/
$('input').each(function () {
var $this = $(this);
var val = $this.val();
vals.push(val);
});
for (var i = 0; i < vals.length; i++) {
for (var n = 0; n < vals.length; n++) {
if (n !== i) {
if (vals[i] === vals[n]) {
alert('There are similar values');
}
}
}
}
最佳答案
编辑:为了满足@Raynos,这里有一个纯JS的解决方案。
var vals = {};
var flag = false;
var collection = document.getElementsByTagName('input');
collection = [].slice.call(collection);
collection.forEach(function(element, index, array) {
if (flag === true) return;
var i = element.value;
if (vals[i])
{
flag = true;
alert('There are duplicates!');
}
else
{
vals[i] = 1;
}
});
奖励:我通过 jsperf 运行我的解决方案;最后一个是obviously by far the fastest .
编辑:这可能是 jQuery 方式 解决您的问题( Working fiddle here )。我的原始答案保留在下面。
var duplicatefound = false;
$('input').each(function(index, item){
if (duplicatefound) return;
val = $(item).val();
if ($('input[value="' + val + '"]').length == 1) return;
duplicatefound = true;
alert('There are similar values');
});
如果您需要捕获部分或全部重复值 ( Working fiddle here ) 的替代解决方案:
var collection = $('input');
var duplicates = $.map(collection, function(item){
val = $(item).val();
return ($('input[value="' + val + '"]').length > 1) ? val : null;
});
if(duplicates.length > 0) alert('There are similar values');
正如其他人提到的,您缺少将 vals
声明为数组,因此 .push()
失败。
您可能会发现基于对象的解决方案更优雅: Working fiddle
var vals = {};
$('input').each(function() {
var index = $(this).val();
if (vals[index])
{
vals[index]++
}
else
{
vals[index] = 1;
}
});
var duplicates = $.map(vals, function(val, key){
return (val > 1) ? key : null;
});
if (duplicates.length > 0) alert('There are duplicates!');
关于javascript - 一起比较多个字段值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10062708/