Javascript 将多个字段值一起比较
如何使用jQuery比较多个输入字段值以及是否存在匹配警报“存在相似值”Javascript 将多个字段值一起比较,javascript,jquery,Javascript,Jquery,如何使用jQuery比较多个输入字段值以及是否存在匹配警报“存在相似值” <input value="111"> //similar <input value="222"> <input value="111"> //similar <input value="333"> //类似 //相似的 上面的html代码应该提醒“有相似的值”,因为它有两个相同的值。如何使用jQuery实现这一点 我尝试过(以下代码无效): 演示: $('input')
<input value="111"> //similar
<input value="222">
<input value="111"> //similar
<input value="333">
//类似
//相似的
上面的html代码应该提醒“有相似的值”,因为它有两个相同的值。如何使用jQuery实现这一点
我尝试过(以下代码无效):
演示:
$('input')。每个(函数(){
var$this=$(this);
var val=$this.val();
推力(val);
});
对于(变量i=0;i
您尚未将VAL
定义为数组。你可以这样定义它
vals = [];
您尚未将
vals
定义为数组。你可以这样定义它
vals = [];
您的代码正常工作,您只是缺少了
vals
array-的声明。您的代码正常工作,您只是缺少vals
array-var inputs=$(“input”)的声明,类似=[],i,j;
对于(i=0;i0){
警报(“存在类似值”);
}
请注意,这只会按顺序比较唯一排列,如果您感兴趣,它会在类似数组中为您提供一个匹配索引数组
示例:
您可以使用document.getElementsByTagName而不是jQuery选择器轻松地删除jQuery依赖项
既然@Raynos不识字,我就把它说清楚
var inputs = document.getElementsByTagName("input"), similar = [], i, j;
for (i = 0; i < inputs.length; i += 1) {
for (j = i + 1; j < inputs.length; j += 1) {
if (inputs[i].value === inputs[j].value) {
similar.push([i,j]);
}
}
}
if (similar.length > 0) {
alert('There are similar values');
}
var inputs=document.getElementsByTagName(“输入”),类似=[],i,j;
对于(i=0;i0){
警报(“存在类似值”);
}
var输入=$(“输入”),类似=[],i,j;
对于(i=0;i0){
警报(“存在类似值”);
}
请注意,这只会按顺序比较唯一排列,如果您感兴趣,它会在类似数组中为您提供一个匹配索引数组
示例:
您可以使用document.getElementsByTagName而不是jQuery选择器轻松地删除jQuery依赖项
既然@Raynos不识字,我就把它说清楚
var inputs = document.getElementsByTagName("input"), similar = [], i, j;
for (i = 0; i < inputs.length; i += 1) {
for (j = i + 1; j < inputs.length; j += 1) {
if (inputs[i].value === inputs[j].value) {
similar.push([i,j]);
}
}
}
if (similar.length > 0) {
alert('There are similar values');
}
var inputs=document.getElementsByTagName(“输入”),类似=[],i,j;
对于(i=0;i0){
警报(“存在类似值”);
}
编辑:为了满足@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运行了我的解决方案;最后一个是
编辑:以下是解决问题的jQuery方法()。我最初的答案仍在下面
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');
});
在需要捕获部分或全部重复值时的替代解决方案():
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()
失败
您可能会发现基于对象的解决方案更加优雅:
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!');
编辑:为了满足@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运行了我的解决方案;最后一个是
编辑:以下是解决问题的jQuery方法()。我最初的答案仍在下面
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');
});
在需要捕获部分或全部重复值时的替代解决方案():
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()
失败
您可能会发现基于对象的解决方案更加优雅:
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!');
我并不想比教皇更神圣,但a)你在迭代每个输入,在每次迭代中将vals
重新定义为一个空数组b)你在每次迭代中检查匹配项,这效率很低。@vzwick是的,你是对的。我不知道我是怎么想的。我并不想比教皇更神圣,但a)你在迭代每个输入,在每次迭代时将vals
重新定义为一个空数组b)你在每次迭代中检查匹配项,这效率不高。@vzwick是的,你是对的。不知道我是怎么想的。对于
循环使用或替代嵌套的。对于
循环使用或替代嵌套的。尝试在只有一个副本的集合上运行此操作,更不用说多个副本;)由于过度迭代,会出现大量警报。如果存在任何重复项,则应设置一个标志,如果该标志为true
,则应在第一个早期返回每个:尝试在只有一个重复项的集合上运行此功能,更不用说多个重复项;)由于过度迭代,会出现大量警报。如果存在任何重复项,则应设置一个标志,如果该标志为true
,则应在第一个的早期return
:与jQuery结合使用的短语“最快的”值得投下一票。最快的解决方案是始终不使用jQuery@Ra