J'essaie de ré-ajouter une "option supprimée" au menu d'option de sélection approprié.jquery supprimer l'élément sélectionné et ajouter à un autre
J'ai trois zones de sélection: "Catégories", "Variables" et "Cible". "Catégories" est une sélection chaînée, donc lorsque l'utilisateur sélectionne une option, la boîte de sélection "Variables" est remplie avec des options spécifiques à l'option des catégories sélectionnées. Lorsque l'utilisateur choisit une option dans la zone de sélection "Variables", il est ajouté à la zone de sélection "Cible". J'ai une fonction "supprimer sélectionné" de sorte que si un utilisateur "supprime" un élément sélectionné de la boîte de sélection "Cible", il est supprimé de "Cible" et remis dans le pool des options "Variables". Le problème que je rencontre est qu'il ajoute l'option aux éléments "Variables" sans discrimination. Autrement dit, si la catégorie sélectionnée est "Age", les options "Variables" ont toutes une classe "age". Mais, si l'option enlevée est un item "revenu", elle apparaîtra dans la liste des options "Age Variables".
Voici le balisage HTML:
<select multiple="" id="categories" name="categories[]">
<option class="category" value="income">income</option>
<option class="category" value="gender">gender</option>
<option class="category" value="age">age</option>
</select>
<select multiple="multiple" id="variables" name="variables[]">
<option class="income" value="10">$90,000 - $99,999</option>
<option class="income" value="11">$100,000 - $124,999</option>
<option class="income" value="12">$125,000 - $149,999</option>
<option class="income" value="13">Greater than $149,999</option>
<option class="gender" value="14">Male</option>
<option class="gender" value="15">Female</option>
<option class="gender" value="16">Ungendered</option>
<option class="age" value="17">Ages 18-24</option>
<option class="age" value="18">Ages 25-34</option>
<option class="age" value="19">Ages 35-44</option>
</select>
<select height="60" multiple="multiple" id="target" name="target[]">
</select>
Et, voici les js:
/* This determines what options are display in the "Variables" select box */
var cat = $('#categories');
var el = $('#variables');
$('#categories option').click(function() {
var class = $(this).val();
$('#variables option').each(function() {
if($(this).hasClass(class)) {
$(this).show();
} else {
$(this).hide();
}
});
});
/* This adds the option to the target select box if the user clicks "add" */
$('#add').click(function() {
return !$('#variables option:selected').appendTo('#target');
});
/* This is the remove function in its current form, but doesn't append correctly */
$('#remove').click(function() {
$('#target option:selected').each(function() {
var class = $(this).attr('class');
if($('#variables option').hasClass(class)) {
$(this).appendTo('#variables');
sortList('variables');
}
});
});
J'ai oublié pour mentionner dans ma réponse, que 'class' est un mot réservé dans JS et ne peut pas être utilisé comme nom de variable. Vous devrez utiliser 'klass' ou' className' ou quelque chose, mais pas 'class' par lui-même. Il va faire erreur dans certains navigateurs. –