8
votes

Problème avec plusieurs sélection de sélectionner plus d'une option

Il semble y avoir un problème avec le code JS pour les navigateurs d'opéra, car il ne supprime que la dernière étiquette d'option sélectionnée dans une balise sélectionnée multiple, peut-on aider à m'aider.

Voici le HTML pour cela: P>

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);
    }
}


0 commentaires

4 Réponses :


6
votes

Vous pouvez le faire beaucoup plus facile en utilisant jQuery : xxx


6 commentaires

Dois-je inclure des bibliothèques pour que cela fonctionne? Si oui, quel (s) a-je besoin?


@Sologhost - Cela fonctionne bien si vous téléchargez et utilisez JQuery.


@Sologhost - Vous devez faire référence à la bibliothèque de JQuery dans votre code. Vous pouvez le faire en insertion de la ligne: (supposant "JQuery-1.4.2.min.js" est dans répertoire de votre fichier HTML). Vous pouvez télécharger des fichiers JQuery à partir du site que j'ai mentionné dans My Post: jquery.com .


Ok, merci, je ne suis pas un grand fan de JQuery, aucune infraction, semble un peu trop compliqué pour moi. Finira par y arriver, je suppose, mais pas encore. Merci quand même.


J'ai eu le même avis sur JQuery il y a quelque temps et maintenant je peux imaginer des projets de construction sans cette bibliothèque. Après de courte durée, vous remarquerez qu'il est parfois plus facile de la plaine JS (Comparez 10+ lignes avec une ligne de jQuery) mais bien sûr, il vous appartient de vos projets. Quoi qu'il en soit, il est bon que vous avez résolu ce problème;)


J'ai toujours utilisé $ ("Option # Actions_List: sélectionné"). RemoveAtTR ("Sélectionné"); mais cela ne coute plus pour travailler plus ... .Remove () fonctionne bien



12
votes

Il est plus facile de le faire avec jQuery, mais vous voulez faire cela à l'aide de JavaScript simple.

Le problème que vous rencontrez est que lorsque vous supprimez un élément de la liste des options dans l'opéra, il désélectionne tous les éléments sélectionnés , alors seul le premier est enlevé. Une solution de contournement est de vous rappeler d'abord quels éléments ont été sélectionnés avant de l'enlever. P>

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);
    }
}


2 commentaires

Merci un million, jamais pensé faire ça. C'était vraiment dérangé l'enfer de moi. Pourquoi ils ne peuvent-ils pas tous travailler les mêmes ... Argg ... Eh bien, c'est la gloire de la diversité. Bravo :) Bytheway, je ne suis pas très familier avec JQuery, aussi facile que cela aurait été, mais je suppose que je suis juste un imbécile à l'ancienne et préférez JS. Merci encore! :)


Cette réponse a plus de 10 ans, mais il est toujours pertinent car toutes les options sont toujours désélectionnées après la suppression du premier (testé avec FF84). Une simple suggestion pour tous ceux qui le trouvent et travaille avec des listes longues: ne sauvegardez pas l'état "sélectionné" de toutes les options, mais uniquement la position ( i ) de ceux qui sont sélectionnés ( sélectionné.push (i) ) dans le , utilisez: action_list.remove (sélectionné [i]) .



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

0 commentaires

0
votes

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);
    }
}


0 commentaires