2009-09-07 4 views
1

Si j'ai plusieurs zones de texte qui ont des ID différents mais tous les identifiants commencent par des 'images' précédées d'un nombre. si:Validation de plusieurs zones de texte avec jquery

textbox1 id = 'pics1' value='test1' 
textbox2 id = 'pics2' value='test2' 
textbox3 id = 'pics3' value='test1' 
... 
submit 

Je veux faire une validation que lorsque l'utilisateur clique sur submit..there sont pas deux valeurs dans les zones de texte qui sont les mêmes. Pour l'exemple ci-dessus, la validation entraînera une erreur et le formulaire ne sera pas soumis. parce que pics1 et pics3 ont les mêmes valeurs.

Répondre

1

Cela fonctionne pour cependant beaucoup d'entrées de texte que vous avez

function validate() { 
    var inputs = $('input:text[id^="pics"]'); 
    var values = $.map(inputs, function(n, i) { 
     return n.value; 
    }); 

    values = unique(values); 

    return values.length === inputs.length; 
} 

function unique(arr) { 
    var r = []; 
    o:for(var i = 0, n = arr.length; i < n; i++) { 
    for(var x = i + 1 ; x < n; x++) { 
     if(arr[x]==arr[i]) continue o; 
    } 
    r[r.length] = arr[i]; 
    } 
    return r; 
} 
+0

merci. J'essayais votre code, mais var entrées retourne false dans le débogage suivant de votre code. var inputs = $ ('input: text [id^= "pics"]'); alert ('here1:' + entrées); –

+0

rien ne va. Il me manquait l'attribut de nom –

+0

@josh - jetez un oeil ici http://jsbin.com/ivigo. ajouter/modifier à l'url si vous voulez voir le code –

0

Essayez ceci:

<script> 
function validate() 
{ 
    var areas = document.getElementsByTag('textarea'); 
    for (var i=0; i<areas.count;i++) 
     for (var j=i+1; j<areas.count;i++) 
      if (areas[i].id.startsWith('pics') && areas[i].id.startsWith('pics') && areas[i].value == areas[j].value) 
       return false; 
    return true 
} 
</script> 

<form onsubmit="return validate();"> 
    <textarea id = 'pics1'></textarea> 
    <textarea id = 'pics2'></textarea> 
    <textarea id = 'pics3'></textarea> 
    <input type="submit" /> 
</form> 
+0

ce n'est pas bon que j'aurai pour créer un var pour chaque élément –

2

Une solution (non testé):

function validate() { 

    var isValid = true; 

    $("input:text[id^=pics]").each(function() { 
     if ($("input:text[id^=pics][value=" + $(this).val() + "]").length > 1) 
     isValid = false; 
     }); 

    return isValid; 
} 
+0

+1, aime l'idée! – karim79

0
<form onsubmit="return validate()" > 
<input type="text" id="pics1" value="test1" /> 
<input type="text" id="pics2" value="test2" /> 
<input type="text" id="pics3" value="test3" /> 
<input type="submit" /> 
<br/><label id="error" /> 
</form> 
<script> 
function validate(){ 
    var inputs=document.getElementsByTagName("input"); 
    var pics1_temp,pics3_temp; 
    for (var i=0;i<inputs.length;i++){ 
     if(inputs[i].id.indexOf("pics")>-1) 
     { 
      if(inputs[i].id=="pics1") 
       pics1_temp=inputs[i].value; 
      else if(inputs[i].id=="pics3") 
       pics3_temp=inputs[i].value; 
     } 
    } 

    if(pics1_temp!=pics3_temp) 
    { 
     document.getElementById("error").innerHTML="Pic1 must match with pic3"; 
     return false; 
    } 
    else return true; 
} 
</script> 
1

I a dû mettre en évidence les boîtes déroulantes (sélectionnez les éléments) contient les mêmes valeurs (valeur sélectionnée).

Alors j'ai juste changé quelques choses.

function validate() { 
    var inputs = $('select[id^="select_style"]'); 
    var values = $.map(inputs, function(n, i) { 
     if(n!=undefined) 
     return n.value+'-'+n.id; 
    }); 

    values = unique(values); 

    for(si=0;si< values.length;si++) 
    { 
    jQuery('#'+values[si]).css('background-color','#ff0000') 
    } 


} 

// I a changé fonction unique un peu, maintenant il retournera un tableau contenant ids de

// éléments qui contient les mêmes valeurs

function unique(arr) 
{ 
     //arr contains array of value1-id1,value2-id2,value3-id3....  
    var arrId=new Array(); 
    var arr1=new Array(); 
    var dIdArr=new Array();//dIdArr array containing ids of elements which contains 
           //duplicate values 

    for(j=0;j< arr.length;j++) 
    { 
     var sa=arr[j].split('-'); 
     arr1[j]=sa[0]; 
     arrId[j]=sa[1]; 
     } 
    var r = [],l=0; 

    o:for(var i = 0, n = arr.length; i < n; i++) 
{ 
    for(var x = i + 1 ; x < n; x++) 
{ 
     if(arr1[x]==arr1[i]) 
     { 
if(jQuery.inArray(arrId[x],dIdArr)==-1)//not found in the array 
             //then assign in the array 
      { 
dIdArr[l]=arrId[x]; 
       l++; 
        if(jQuery.inArray(arrId[i],dIdArr)==-1) 
        { 
       dIdArr[l]= arrId[i];l++;} 
       } 
       else if(jQuery.inArray(arrId[i],dIdArr)==-1){ 
         dIdArr[l]=arrId[i]; 
         l++; 
        } 
     continue o; 
     } 
    } 
    r[r.length] = arr1[i]; 
    } 
return dIdArr; 

} 
Questions connexes