Comment enlever toutes les options d'une zone de sélection, puis ajouter une option et sélectionner avec jQuery?
en utilisant core jQuery, comment supprimer toutes les options d'une boîte de sélection, puis Ajouter une option et la sélectionner?
ma boîte de sélection est la suivante.
<Select id="mySelect" size="9" </Select>
EDIT: le code suivant a été utile pour le chaînage. Cependant, (dans Internet Explorer) .val('whatever')
n'a pas sélectionné l'option qui a été ajoutée. (J'ai utilisé la même " valeur "dans .append
et .val
.)
$('#mySelect').find('option').remove().end().append('<option value="whatever">text</option>').val('whatever');
EDIT: en Essayant de le rendre pour imiter ce code, j'utilise le code suivant chaque fois que la page/forme est réinitialisée. Cette zone est remplie par un ensemble de boutons radio. .focus()
est plus proche, mais l'option ne semble pas sélectionnée comme elle le fait avec .selected= "true"
. Rien ne cloche avec mon code existant - j'essaie juste d'apprendre le jQuery.
var mySelect = document.getElementById('mySelect');
mySelect.options.length = 0;
mySelect.options[0] = new Option ("Foo (only choice)", "Foo");
mySelect.options[0].selected="true";
modifier: réponse sélectionnée était proche de ce dont j'avais besoin. Cela a fonctionné pour moi:
$('#mySelect').children().remove().end().append('<option selected value="whatever">text</option>') ;
mais les deux réponses m'ont conduit à ma finale solution..
21 réponses
$('#mySelect')
.find('option')
.remove()
.end()
.append('<option value="whatever">text</option>')
.val('whatever')
;
$('#mySelect')
.empty()
.append('<option selected="selected" value="whatever">text</option>')
;
pourquoi ne pas utiliser simplement javascript?
document.getElementById("selectID").options.length = 0;
j'ai eu un bug dans IE7 (fonctionne très bien dans IE6) où l'utilisation des méthodes jQuery ci-dessus permettrait d'effacer le sélectionner dans le DOM mais pas à l'écran. En utilisant la barre D'outils du développeur IE, je pouvais confirmer que le select avait été effacé et avait les nouveaux éléments, mais visuellement le select montrait toujours les anciens éléments - même si vous ne pouviez pas les sélectionner.
la solution était d'utiliser des méthodes DOM standard/properites (comme l'affiche originale avait) à effacer plutôt que jQuery - toujours en utilisant jQuery pour ajouter des options.
$('#mySelect')[0].options.length = 0;
si votre but est de supprimer toutes les options de select sauf la première (typiquement l'option' s'il vous plaît choisir un article'), vous pouvez utiliser:
$('#mySelect').find('option:not(:first)').remove();
$('#mySelect')
.empty()
.append('<option value="whatever">text</option>')
.find('option:first')
.attr("selected","selected")
;
ne sait pas exactement ce que vous voulez dire par" ajouter un et le sélectionner", car il sera sélectionné par défaut de toute façon. Mais, si vous ajoutez plus d'un, il aurait plus de sens. Que diriez-vous de quelque chose comme:
$('select').children().remove();
$('select').append('<option id="foo">foo</option>');
$('#foo').focus();
réponse à "EDIT" : pouvez-vous clarifier ce que vous voulez dire par "cette zone de sélection est peuplée par un ensemble de boutons radio"? Un élément
$("#control").html("<option selected=\"selected\">The Option...</option>");
grâce aux réponses que j'ai reçues, j'ai pu créer quelque chose comme ce qui suit, qui répond à mes besoins. Ma question était quelque peu ambiguë. Merci pour le suivi. Mon dernier problème a été résolu en incluant les "sélectionnés" dans l'option que je voulais sélectionné.
$(function() {
$('#mySelect').children().remove().end().append('<option selected value="One">One option</option>') ; // clear the select box, then add one option which is selected
$("input[name='myRadio']").filter( "[value='1']" ).attr( "checked", "checked" ); // select radio button with value 1
// Bind click event to each radio button.
$("input[name='myRadio']").bind("click",
function() {
switch(this.value) {
case "1":
$('#mySelect').find('option').remove().end().append('<option selected value="One">One option</option>') ;
break ;
case "2":
$('#mySelect').find('option').remove() ;
var items = ["Item1", "Item2", "Item3"] ; // Set locally for demo
var options = '' ;
for (var i = 0; i < items.length; i++) {
if (i==0) {
options += '<option selected value="' + items[i] + '">' + items[i] + '</option>';
}
else {
options += '<option value="' + items[i] + '">' + items[i] + '</option>';
}
}
$('#mySelect').html(options); // Populate select box with array
break ;
} // Switch end
} // Bind function end
); // bind end
}); // Event listener end
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<label>One<input name="myRadio" type="radio" value="1" /></label>
<label>Two<input name="myRadio" type="radio" value="2" /></label>
<select id="mySelect" size="9"></select>
-
le Premier clair de capter tous les option execpt la première(--Select--)
-
ajouter de nouvelles valeurs d'option en utilisant la boucle un par un
$('#ddlCustomer').find('option:not(:first)').remove(); for (var i = 0; i < oResult.length; i++) { $("#ddlCustomer").append(new Option(oResult[i].CustomerName, oResult[i].CustomerID + '/' + oResult[i].ID)); }
pourquoi ne pas simplement changer le html en nouvelles données.
$('#mySelect').html('<option value="whatever">text</option>');
autre exemple:
$('#mySelect').html('
<option value="1" selected>text1</option>
<option value="2">text2</option>
<option value="3" disabled>text3</option>
');
une autre voie:
$('#select').empty().append($('<option>').text('---------').attr('value',''));
sous ce lien, il y a les bonnes pratiques https://api.jquery.com/select /
j'ai trouvé sur le net quelque chose comme ci-dessous. Avec des milliers d'options comme dans ma situation, c'est beaucoup plus rapide que .empty()
ou .find().remove()
de jQuery.
var ClearOptionsFast = function(id) {
var selectObj = document.getElementById(id);
var selectParentNode = selectObj.parentNode;
var newSelectObj = selectObj.cloneNode(false); // Make a shallow copy
selectParentNode.replaceChild(newSelectObj, selectObj);
return newSelectObj;
}
complément d'information ici .
S'appuyant sur la réponse de mauretto, c'est un peu plus facile à lire et à comprendre:
$('#mySelect').find('option').not(':first').remove();
pour supprimer toutes les options sauf une avec une valeur spécifique, vous pouvez utiliser ceci:
$('#mySelect').find('option').not('[value=123]').remove();
Ce serait mieux si l'option était déjà là.
ceci remplacera votre mySelect existant par un nouveau mySelect.
$('#mySelect').replaceWith('<Select id="mySelect" size="9">
<option value="whatever" selected="selected" >text</option>
</Select>');
vous pouvez le faire simplement en remplaçant html
$('#mySelect')
.html('<option value="whatever" selected>text</option>')
.trigger('change');
Espère que cela va fonctionner
$('#myselect').find('option').remove()
.append($('<option></option>').val('value1').html('option1'));
- enregistrer les valeurs de l'option à ajouter dans un objet
- Effacer les options existantes dans la balise select
- itérer l'objet list et ajouter le contenu à la balise select prévue
var listToAppend = {'':'Select Vehicle','mc': 'Motor Cyle', 'tr': 'Tricycle'};
$('#selectID').empty();
$.each(listToAppend, function(val, text) {
$('#selectID').append( new Option(text,val) );
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
var select = $('#mySelect');
select.find('option').remove().end()
.append($('<option/>').val('').text('Select'));
var data = [{"id":1,"title":"Option one"}, {"id":2,"title":"Option two"}];
for(var i in data) {
var d = data[i];
var option = $('<option/>').val(d.id).text(d.title);
select.append(option);
}
select.val('');
$("#id option").remove();
$("#id").append('<option value="testValue" >TestText</option>');
la première ligne de code supprimera toutes les options d'une case select car aucune option find criteria n'a été mentionnée.
la deuxième ligne de code ajoutera L'Option avec la valeur spécifiée ("testValue") et le texte ("TestText").