2010-06-12 24 views
5

Ok, il semble y avoir un problème avec le code JS pour les navigateurs Opera, car il supprime uniquement la dernière balise d'option qui est sélectionnée dans une balise de sélection multiple, quelqu'un peut m'aider s'il vous plaît .Problème avec sélection multiple supprimant plus de 1 option

Voici le code HTML pour cela:

<select id="actions_list" name="layouts" multiple style="height: 128px; width: 300px;"> 
    <option value="forum">forum</option> 
    <option value="collapse">collapse</option> 
    <option value="[topic]">[topic]</option> 
    <option value="[board]">[board]</option> 
</select> 

Ofcourse il est dans une balise forme, mais il y a une tonne plus de code impliqué dans cette forme, mais voici les informations pertinentes pour cela.

Voici le JS qui devrait gérer cela, mais ne supprime que la dernière option sélectionnée dans Opera, pas sûr d'autres navigateurs, mais il faut vraiment supprimer toutes les options sélectionnées, pas seulement la dernière option sélectionnée ... argg

var action_list = document.getElementById("actions_list"); 
var i = action_list.options.length; 
while(i--) 
{ 
    if (action_list.options[i].selected) 
    { 
     action_list.remove(i); 
    } 
} 

Quel est le problème avec cela? Je ne peux pas le comprendre un bit :(

Merci :)

Répondre

8

Il est plus facile de le faire avec jQuery mais vous veulent faites ceci en utilisant Javascript simple, vous pouvez. Le problème que vous rencontrez est que lorsque vous supprimez un élément de la liste d'options dans Opera, il désélectionne tous les éléments sélectionnés, de sorte que seul le premier est supprimé. Une solution de contournement consiste à d'abord se souvenir quels éléments ont été sélectionnés avant d'en supprimer.

var action_list = document.getElementById("actions_list"); 

// Remember selected items. 
var is_selected = []; 
for (var i = 0; i < action_list.options.length; ++i) 
{ 
    is_selected[i] = action_list.options[i].selected; 
} 

// Remove selected items. 
i = action_list.options.length; 
while (i--) 
{ 
    if (is_selected[i]) 
    { 
     action_list.remove(i); 
    } 
} 
+0

Merci un million, jamais pensé à le faire. Cela me dérangeait vraiment. Pourquoi ne peuvent-ils pas tous travailler de la même façon ... argg ... Eh bien, c'est la gloire de la diversité. Bravo :) En passant, je ne suis pas très familier avec jQuery, aussi facile qu'il soit, mais je suppose que je suis juste un imbécile à l'ancienne et préfère JS. Merci encore! :) – SoLoGHoST

5

Vous pouvez le faire beaucoup plus facile en utilisant jQuery:

$('#actions_list option:selected').remove() 
+0

Dois-je inclure les bibliothèques pour que cela fonctionne? Si oui, lequel (s) ai-je besoin? – SoLoGHoST

+0

Ce code que vous avez posté ne fonctionne pas ... arggg – SoLoGHoST

+0

@SoLoGHoST - Cela fonctionne bien si vous venez de télécharger et d'utiliser jQuery. –

0
$.each($('[name="alltags"] option:selected'), function(index, value) { 
    $(this).remove(); 
}); 

essayer au lieu de supprimer la sélection multiple

0

Suppression de plusieurs options de sélection en fonction de la condition:

while(SelectBox.length > 1){ 
    if(SelectBox[SelectBox.length -1].text != "YourCondition"){ 
     SelectBox.remove(SelectBox.length -1); 
    } 
}