我有一个小脚本,可以检测表单上字段数组中的重复元素。
function dupes() {
var unique = [];
//Loop through array of fields to get entered values
for (i = 0; i <= 9; i++) {
unique[i] = Number(document.getElementById('proj' + i).value);
}
unique.sort();
//Now compare the array values. If there are any duplicates, throw an error
for (i = 1; i <= 9; i++) {
if (unique[i] == unique[i - 1]) {
document.getElementById('errormsg').innerHTML = 'duplicated values!';
return false;
}
}
}
其中有十个&#34; proj&#34; fields(proj0 - proj9),我有一个onClick事件被分配来调用这个函数。如果有任何重复值,则跨度&#39; errormsg&#39;应该显示错误,但它不起作用。我可能会缺少什么?
答案 0 :(得分:1)
//Check for duplicate project numbers
function errorCheck() {
var unique = [];
//Loop through array of fields to get entered values
for (i = 0; i <= 9; i++) {
var currentValue = Number(document.getElementById('projNo' + i).value);
if(unique.indexOf(currentValue)!=-1)
{
document.getElementById('projError').innerHTML = 'duplicated values!';
return false;
}
unique[i]=currentValue;
}
return true;
}
首先使用unique.indexOf(currentValue)
检查数组中是否已有值。此函数返回搜索到的元素的索引,如果未找到则返回-1。
如果找不到,则将其添加到数组并转到下一个。
修改强>
如果您想在重新提交时重置错误消息并且没有更多重复项,请不要忘记在return true;
之前重置错误消息:
document.getElementById('projError').innerHTML = 'no duplicates ;)';
答案 1 :(得分:0)
这将检测重复值:
var arr= [];
//Loop through array of fields to get entered values
for (i = 0; i <= 9; i++) {
arr.push(Number(document.getElementById('proj' + i).value));
}
function dupes(arr) { // pass the array to find dupes
var i, len=arr.length, unique= [], obj={};
for (i=0;i<len;i++) {
obj[arr[i]]=0;
}
for (i in obj) {
unique.push(i);
}
if(unique.length != arr.length) {
document.getElementById('errormsg').innerHTML = 'duplicated values!';
}
}
dupes(arr);