2009-07-13 6 views
0

J'ai le 'n' numéro de zone de texte sur un formulaire, après que l'utilisateur entre une valeur dans une zone de texte, je dois valider son non un doublon dans les autres zones de texte.javascript Validation de plusieurs zones de texte d'entrée

Ex:

Textbox[0] : 1 
Textbox[1] : 2 
Textbox[2] : 3 
Textbox[4] : 1 

Pour cet exemple, il doit alerter en disant que '1' sont entrés deux fois. Dites-moi ce qu'il faut faire.

Répondre

1

Si vous avez déjà les zones de texte dans un tableau, parcourez le tableau et recherchez les valeurs dupliquées. Ce n'est pas le moyen le plus efficace (c'est O (n) de calculer) pour résoudre le problème (un dictionnaire serait mieux), mais pour un petit nombre de zones de texte c'est le plus simple.

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."); 
      } 
     } 
    } 
} 

Si vous avez plus d'environ 10 zones de texte dans votre tableau, une autre approche est de construire une cartographie de combien de fois chaque valeur apparaît:

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."); 
    } 
} 
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; 

} 
0

En supposant que vous avez du code à lire dans les champs de saisie et de les stocker dans un tableau

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; 
} 

cela devrait être très performant car il va seulement jusqu'à ce que je t trouve un doublon

0

C'est assez facile en utilisant un objet 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) + ')'); 
      } 
     }); 
    } 

Cette fonction parcourt toutes les entrées de texte de la page en cours. Si une valeur n'a jamais été vue auparavant, elle est enregistrée dans le hachage. Si la valeur est déjà dans le hachage, nous avons un doublon.

Dans cet exemple, il affiche les ID des deux éléments avec des valeurs en double.

Questions connexes