2010-07-26 10 views
0

i ont une balise select multiplecorrige le dernier élément modifié dans plusieurs balises de sélection?

<select multiple="multiple" size="5" id="cities_select"> 
    <option value="1">city1</option> 
    <option value="2">city2</option> 
    <option value="3">city3</option> 
    <option value="4">city4</option> 
    <option value="5">city5</option> 
    <option value="6">city6</option> 
    ................................ 
</select> 

i besoin d'avoir des éléments max 5 sélectionnés, à savoir

si i ai choisi 1,2,3,4,5 éléments, onselect od sixième élément i besoin de retirer l'attribut sélectionné du premier, à savoir , je dois obtenir 2,3,4,5,6 éléments sélectionnés.

et maintenant, quel est le problème, si je l'ai choisi 2,3,4,5,6 par exemple, onselect d'abord, je dois retirer un attribut sélectionné de dernier élément sélectionné, et obtenir 1,2,3,4,5 liste sélectionnée. comment puis-je obtenir cet effet (je ne peux pas réparer l'élément, qui a été modifié en dernier).

$("#supply_cities_select").change(function() 
     { 
      var a = $("#supply_cities_select :selected").length; 
      if(a > 5) 
      { 
       //i don't know what to write here:(
      } 
     }) 

Des idées?

Merci

+0

Que faire si vous cliquez sur le d'abord, puis Maj + cliquez sur le dernier? :) –

+0

si le dernier élément édité est dans la seconde moitié de la liste, je dois supprimer le premier élément sélectionné, sinon le dernier. – Simon

+0

est '3,1,2,4,5' valide? il doit être en ordre? – Reigel

Répondre

0

Pour obtenir cet effet, je ne peux pas aider à utiliser la méthode .change, donc j'écrit la fonction événement onclick

$("#supply_cities_select option").click(function() 
     { 
      var clicked = 0; 
      if($(this).attr("selected")) 
      { 
       clicked = $(this).val(); 
      } 
      if(clicked != 0) 
      { 
       var a = $("#supply_cities_select :selected").length; 
       end = $("#supply_cities_select :selected").slice(-1).map(function(i) { 
         return this.value; 
        }).get().join(''); 
       if(a > 5) 
       { 
        var v1 = parseInt(clicked); 
        var v2 = parseInt(end); 
        if(v1 < v2) 
        { 
         $("#supply_cities_select option[value='"+v2+"']").attr("selected",false); 

        } 
        if(v1 == v2) 
        { 
         $("#supply_cities_select :selected:lt(1)").attr("selected",false); 
        } 

       } 
      } 
     }); 

vous pouvez voir la démo here

Questions connexes