2009-10-06 7 views
0

J'ai un formulaire qui permet à l'utilisateur de sélectionner jusqu'à X nombre d'options à partir d'un champ à sélection multiple. Si l'utilisateur sélectionne un élément supérieur aux éléments X, il invite et désélectionne le dernier élément sélectionné.plusieurs valeurs de sélection erreur

Un problème est survenu lorsque le message d'avertissement a été envoyé par un multi-sélection précédent.

Le formulaire a 4 mult-sélections, donc si son lancé sur le troisième mult-select ou le nombre max a déjà été atteint par un mult-select précédent, il va lancer l'erreur pour le multi-select suivant, que ce soit l'utilisateur choisit le bon numéro.

Voici un extrait de code. Le reste des sélections sur la page sont construites de la même façon, mais utilisent des noms différents:

<select multiple name="seasons[]" size="6" id="seasons" onChange="countSelected(this,5)"> 
<option value=0>Hold CTRL to select more than one</option> 
<? 
    $ftw = mysql_query("SELECT s.seasonId, s.type FROM seasons s ORDER BY s.seasonId ASC"); 
    while ($line = mysql_fetch_array($ftw)) { 
    $queried = mysql_query("SELECT seasonId FROM selectedSeason where seasonId = '$line[0]' AND id = '$objItem->itemId'"); 
     if(mysql_fetch_row($queried)) 
     echo "<option selected value=\"$line[0]\">". $line[1] ."</option>"; 
     else 
     echo "<option value=\"$line[0]\">". $line[1] ."</option>"; 
    } 
?> 
</select> 

Voici le javascript pour mettre en garde:

var selectedOptions = []; 

function countSelected(select,maxNumber){ 
    for(var i=0; i<select.options.length; i++){ 
    if(select.options[i].selected && !new RegExp(i,'g').test(selectedOptions.toString())){ 
     selectedOptions.push(i); 
    } 

    if(!select.options[i].selected && new RegExp(i,'g').test(selectedOptions.toString())){ 
     selectedOptions = selectedOptions.sort(function(a,b){return a-b}); 
     for(var j=0; j<selectedOptions.length; j++){ 
     if(selectedOptions[j] == i){ 
      selectedOptions.splice(j,1); 
     } 
     } 
    } 

    if(selectedOptions.length > maxNumber){ 
     var throwAlert = true; 
     select.options[i].selected = false; 
     selectedOptions.pop(); 
    } 
    } 

    if(throwAlert == true){ 
     alert('You may only choose '+maxNumber+' options!!'); 
     document.body.focus(); 
    } 
} 

saisons doit être saisons [] de sorte qu'il peut poster plusieurs valeurs à PHP. Je n'ai aucun problème de publication ou de récupération de données uniquement avec le javascript. L'erreur se produit dans IE, FF et Safari mais pas Chrome ... hélas.

Toutes les idées seraient d'une valeur inestimable.

Répondre

0

je suppose que u besoin de faire les selectedOptions en quelque chose de tableau multidimensionnel sur les lignes

selectedOptions[0][0] /// indicating to first select box option 1 
selectedOptions[0][1] /// indicating to first select box option 2 

quelque chose sur ces lignes devrait fonctionner. Si vous voulez le faire rapidement et de façon sale, vous avez sélectionnéOptions1 [] selectedOptions2 [] etc. et utilisez une instruction if else pour travailler avec le tableau correct au début de la fonction js.

Questions connexes