Qual é a maneira mais fácil de adicionar um option
a um menu suspenso usando jQuery?
Isso vai funcionar?
$("#mySelect").append('<option value=1>My option</option>');
Qual é a maneira mais fácil de adicionar um option
a um menu suspenso usando jQuery?
Isso vai funcionar?
$("#mySelect").append('<option value=1>My option</option>');
Respostas:
Isso NÃO funcionou no IE8 (ainda funcionou no FF):
$("#selectList").append(new Option("option text", "value"));
Este trabalho DID:
var o = new Option("option text", "value");
/// jquerify the DOM object 'o' so we can use the html method
$(o).html("option text");
$("#selectList").append(o);
display: table;
é aplicado como estilo ao elemento de seleção. Isso irá quebrar o código js
var o = new Option('option text', 'value'); o.innerHTML = 'option text'; document.getElementById('selectList').appendChild(o);
Pessoalmente, prefiro esta sintaxe para anexar opções:
$('#mySelect').append($('<option>', {
value: 1,
text: 'My option'
}));
Se você estiver adicionando opções de uma coleção de itens, poderá fazer o seguinte:
$.each(items, function (i, item) {
$('#mySelect').append($('<option>', {
value: item.value,
text : item.text
}));
});
items={option1:{value:1,text:1},option2:{value:2,text:2}}
Você pode adicionar a opção usando a seguinte sintaxe. Também pode visitar a opção de manipulação de maneira no jQuery para obter mais detalhes.
$('#select').append($('<option>', {value:1, text:'One'}));
$('#select').append('<option value="1">One</option>');
var option = new Option(text, value); $('#select').append($(option));
value
vez de val
). O código correto deve ser$('select').append('<option value="1">One</option>');
Se o nome ou o valor da opção for dinâmico, você não precisará se preocupar com o escape de caracteres especiais; nisso, você pode preferir métodos DOM simples:
var s= document.getElementById('mySelect');
s.options[s.options.length]= new Option('My option', '1');
Você pode tentar isso-
$('#selectID').append($('<option>',
{
value: value_variable,
text : text_variable
}));
Como isso-
for (i = 0; i < 10; i++)
{
$('#mySelect').append($('<option>',
{
value: i,
text : "Option "+i
}));
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<select id='mySelect'></select>
Ou tente isso-
$('#selectID').append( '<option value="'+value_variable+'">'+text_variable+'</option>' );
Como isso-
for (i = 0; i < 10; i++)
{
$('#mySelect').append( '<option value="'+i+'">'+'Option '+i+'</option>' );
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<select id='mySelect'></select>
Isto é muito simples:
$('#select_id').append('<option value="five" selected="selected">Five</option>');
ou
$('#select_id').append($('<option>', {
value: 1,
text: 'One'
}));
por qualquer motivo, $("#myselect").append(new Option("text", "text"));
não está funcionando para mim no IE7 +
Eu tive que usar $("#myselect").html("<option value='text'>text</option>");
Para ajudar no desempenho, você deve tentar alterar o DOM apenas uma vez, ainda mais se estiver adicionando muitas opções.
var html = '';
for (var i = 0, len = data.length; i < len; ++i) {
html.join('<option value="' + data[i]['value'] + '">' + data[i]['label'] + '</option>');
}
$('#select').append(html);
string.join()
para concatenar cadeias
$('#mySelect').empty().append('<option value=1>My option</option>').selectmenu('refresh');
selectmenu()
não faz parte do núcleo do jQuery e é um widget do jQueryUI . Isso a torna uma solução bastante pesada, não?
Eu gosto de usar a abordagem não jquery:
mySelect.add(new Option('My option', 1));
Você pode adicionar opções dinamicamente ao menu suspenso, como mostrado no exemplo abaixo. Aqui neste exemplo, peguei os dados da matriz e vinculei esses valores à lista suspensa, como mostrado na captura de tela de saída
Resultado:
var resultData=["Mumbai","Delhi","Chennai","Goa"]
$(document).ready(function(){
var myselect = $('<select>');
$.each(resultData, function(index, key) {
myselect.append( $('<option></option>').val(key).html(key) );
});
$('#selectCity').append(myselect.html());
});
<script src="https://ajax.aspnetcdn.com/ajax/jQuery/jquery-3.2.1.min.js">
</script>
<select id="selectCity">
</select>
Não mencionado em nenhuma resposta, mas útil é o caso em que você deseja que essa opção também seja selecionada, você pode adicionar:
var o = new Option("option text", "value");
o.selected=true;
$("#mySelect").append(o);
Existem duas maneiras. Você pode usar um desses dois.
Primeiro:
$('#waterTransportationFrom').append('<option value="select" selected="selected">Select From Dropdown List</option>');
Segundo:
$.each(dataCollecton, function(val, text) {
options.append($('<option></option>').val(text.route).html(text.route));
});
Encontramos algum problema quando você anexa a opção e usa o jquery validate. Você deve clicar em um item na lista de seleção múltipla. Você adicionará este código para lidar com:
$("#phonelist").append("<option value='"+ 'yournewvalue' +"' >"+ 'yournewvalue' +"</option>");
$("#phonelist option:selected").removeAttr("selected"); // add to remove lase selected
$('#phonelist option[value=' + 'yournewvalue' + ']').attr('selected', true); //add new selected
Este é apenas um ponto rápido para obter o melhor desempenho
sempre que estiver lidando com muitas opções, construa uma grande string e adicione-a ao 'select' para obter o melhor desempenho
fg
var $ mySelect = $ ('# mySelect'); var str = '';
$.each(items, function (i, item) {
// IMPORTANT: no selectors inside the loop (for the best performance)
str += "<option value='" + item.value + "'> " + item.text + "</option>";
});
// you built a big string
$mySelect.html(str); // <-- here you add the big string with a lot of options into the selector.
$mySelect.multiSelect('refresh');
var str = "";
for(var i; i = 0; i < arr.length; i++){
str += "<option value='" + item[i].value + "'> " + item[i].text + "</option>";
}
$mySelect.html(str);
$mySelect.multiSelect('refresh');
$(function () {
var option = $("<option></option>");
option.text("Display text");
option.val("1");
$("#Select1").append(option);
});
Se você estiver obtendo dados de algum objeto, basta encaminhar esse objeto para funcionar ...
$(function (product) {
var option = $("<option></option>");
option.text(product.Name);
option.val(product.Id);
$("#Select1").append(option);
});
Nome e ID são nomes de propriedades do objeto ... para que você possa chamá-los como quiser ... E, claro, se você tiver Array ... deseja criar uma função personalizada com o loop for ... e depois chamar essa função em documento pronto ... Felicidades
Com base na resposta do dule para anexar uma coleção de itens, um one-linerfor...in
também fará maravilhas:
let cities = {'ny':'New York','ld':'London','db':'Dubai','pk':'Beijing','tk':'Tokyo','nd':'New Delhi'};
for(let c in cities){$('#selectCity').append($('<option>',{value: c,text: cities[c]}))}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.0/jquery.min.js"></script>
<select id="selectCity"></select>
Valores e índices de objetos são atribuídos às opções. Esta solução funciona mesmo no jQuery antigo (v1.4) !
Você pode tentar o código abaixo para anexar à opção
<select id="mySelect"></select>
<script>
$("#mySelect").append($("<option></option>").val("1").html("My enter code hereoption"));
</script>
Foi assim que eu fiz, com um botão para adicionar cada tag de seleção.
$(document).on("click","#button",function() {
$('#id_table_AddTransactions').append('<option></option>')
}
$(document).ready(function(){ $("#button").click(function() { $('#id_table_AddTransactions').append('<option></option>'); }); });
Se alguém vier aqui procurando uma maneira de adicionar opções com propriedades de dados
Usando attr
var option = $('<option>', { value: 'the_value', text: 'some text' }).attr('family', model.family);
Usando dados - versão adicionada 1.2.3
var option = $('<option>', { value: 'the_value', text: 'some text' }).data('misc', 'misc-value);
$("#mySelect").html(....)
para substituir as opções atuais pelas novas.