Je génère un formulaire dynamique avec uniquement des select avec une liste prédéfinis
du style :

<div class="class1">....<div class="class2">...<select id="input0" name="0"> même liste de valeur</select></div></div>
<div class="class1">....<div class="class2">... <select id="input1" name="1">même liste de valeur</select></div></div>
<div class="class1">....<div class="class2">... <select id="input2" name="2">même liste de valeur</select></div></div>
.
.
.
<div class="class1">....<div class="class2">... <select id="inputn" name="n">même liste de valeur</select></div></div>

Je veux tester avec jQuery qu'une valeur de la liste ne peu être sélectionner qu'une fois
si on la sélectionné une deuxième fois on génère une erreur avec un message. Voici mon code
mais je n'arrive pas.

for(i=0;i < n ;i++){
    var valeur='';
    $("#input"+i).change(function(){
        valeur = $(this).val();
        for(j=0;j < n;j++){
            if(i != j){
                if($("#input"+j).val() == valeur){
                    $('.help-inline').detach();
                    ($(this).parent()).parent().addClass("error");
                $(this).after("<span class='help-inline'>Valeur déja sélectionnez<span>");

                }else{
                    ($(this).parent()).parent().removeClass("error");
                    $('.help-inline').detach();
                    }               
                }           
            }       
        });
    }

2 réponses


Leny
Réponse acceptée

Trop de boucles tuent les boucles.

Et puis tu déclares ton handler tellement de fois que dans un sens, c'est logique que ça ne passe pas.

Complètement pas testé et écrit de tête, perso, j'serai parti dans ce sens :

$( function() {
    $( 'select[id^="input"]' ).change( selectChanged );
} );
function selectChanged( e ) {
    var changedRef = $( this );
    $( 'select[id^="input"]:not(#' + changedRef.attr( 'id' ) + ')' ).each( function() {
        if( changedRef.val() == $( this ).val() ) {
            // TODO : ton code d'erreur
        } else {
            // TODO : ton code de pas d'erreur
        }
    } );    
} // selectChanged

Et je suis sûr que la boucle que j'ai laissée est complètement dispensable, mais comme j'ai pas le projet en tête...

inassen
Auteur
Réponse acceptée

Merci. c'est ok.