我在表单上有'n'个文本框,在用户在文本框中输入值后,我需要在其他文本框中验证它不是重复文件。
前:
Textbox[0] : 1
Textbox[1] : 2
Textbox[2] : 3
Textbox[4] : 1
对于这个例子,它应警告说“1”已输入两次。 让我知道该怎么做。
答案 0 :(得分:1)
如果您已在数组中包含文本框,请遍历该数组并查找重复值。这不是最有效的方式(它是O(n 2 )来计算)来解决问题(字典会更好),但对于少量文本盒子是最简单的。
function TestForDuplicates( var Textboxes )
{
for( tb in Textboxes )
{
for( tb2 in Textboxes )
{
if( tb != tb2 ) // ignore the same textbox...
{
if( tb.value == tb2.value )
alert( "The value " + tb.value + " appears more than once." );
}
}
}
}
如果阵列中有超过10个文本框,另一种方法是构建每个值出现次数的映射:
function FindDuplicates( var Textboxes )
{
var valueList = new Array();
for( tb in Textboxes )
valueList.push( tb.value );
valueList.sort(); // sort values so that duplicates are adjacent
if( valueList.length > 1 )
{
for( i = 0; i < valueList.length-1; i++ )
if( valueList[i] == valueList[i+1] )
alert( "The value " + valueList[i] + " appears more than once." );
}
}
答案 1 :(得分:0)
function testValues ()
{
var inputs = document.getElementsByTagName ("input");
var answers= new Array();
for(var ii = 0; ii < inputs.length; ii++)
{
if(inputs[ii].type == 'text')
{
for(var jj = 0; jj < answers.length; jj++)
{
if(answers[jj] == inputs[ii].value)
return false;
}
answers.push(inputs[ii].value);
}
}
return true;
}
答案 2 :(得分:0)
假设您有要在文本框中读取的代码并将它们存储在数组中
var validator = function(textbox){
var values = [];
for(i=0;i<textbox.length;i+=1){
if (values.indexOf(textbox[i]) === -1){
values[i] = textbox[i];
}else{
return false;
}
}
return true;
}
这应该是非常高效的,因为它只会发现重复
答案 3 :(得分:0)
使用PrototypeJS Hash对象非常简单。
function validate() {
var textVals = new Hash();
$$('input[type=text]').each( function(elem) {
if(textVals.get(elem.value) == undefined) {
textVals.set(elem.value, elem.id);
}else {
alert('Duplicate text value found (' + elem.id + '=' + textVals.get(elem.value) + ')');
}
});
}
此函数迭代当前页面上的所有文本输入。如果之前从未见过某个值,则会将其保存到哈希值。如果该值已经在哈希值中,则我们有重复。
在此示例中,它显示具有重复值的两个元素的ID。