JQuery - Alterar o elemento suspenso dinâmico
-
13-09-2019 - |
Pergunta
Eu tenho um suspensão gerado dinamicamente para o qual preciso alterar o valor selecionado usando o jQuery.
<select class="txtfield country" id="ctl00_MainContentAreaPlaceHolder_personalInformation_country" name="ctl00$MainContentAreaPlaceHolder$personalInformation$country">
<option value="FJ">FIDJI</option>
<option value="FI">FINLANDE</option>
<option value="FR" selected="selected">FRANCE METROPOLITAINE</option>
<option value="GA">GABON</option>
</select>
Uma maneira é usar todo o ID do suspensão (incluindo CTL00 ..):
$j("#ctl00_MainContentAreaPlaceHolder_DeliveryPersonalInformation_country option[value='FR']").attr('selected', 'selected');
Existe uma maneira de usar o CSS, encontro o elemento e alterar o valor, pois não prefiro usar o ID do controle dinâmico?
Editar:
Esqueci de mencionar que tenho 2 controles personalizados na página com o mesmo nome suspenso.
Portanto, o controle personalizado 1 gera:
<select class="txtfield ckgcountry" id="ctl00_MainContentAreaPlaceHolder_personalInformation_country" name="ctl00$MainContentAreaPlaceHolder$personalInformation$country"> ...
<option value="ZW">ZIMBABWE</option>
</select>
e o controle do cliente 2 gera:
<select class="txtfield country" id="ctl00_MainContentAreaPlaceHolder_personalInformation_country" name="ctl00$MainContentAreaPlaceHolder$personalInformation$country">
<option value="FJ">FIDJI</option>
<option value="FI">FINLANDE</option>
<option value="FR" selected="selected">FRANCE METROPOLITAINE</option>
<option value="GA">GABON</option>
</select>
Portanto, usando o código, ele altera o valor apenas do primeiro nome que encontra no DOM, como altero o valor do segundo ... Existe uma maneira de fazer isso usando CSS?
Solução
Parece que você está usando asp.net.
Realmente não é confiável usar o ID de controle ASP.NET completo (pós-renderização) porque pode mudar em algum momento. A única parte do ID que é garantida para não mudar é a última parte do ID que foi definido na propriedade ID do ASP.NET Control.
Selecione esse item com um seletor de curinga
// Unselect the currently selected item
$("select[id$='personalInformation_country'] option:selected").removeAttr("selected");
// Select the option at index 0
$("select[id$='personalInformation_country'] option:eq(0)").attr("selected","selected");
ou
// Select the option with value FR
$("select[id$='personalInformation_country'] option[value='FR']").attr("selected","selected");
o $='personalInformation_country'
Combinará todo o final do ID com "Personalinformation_Country", que deve ser apenas um!
Outras dicas
Você quer dizer assim?
$('select.country').val('FR');
Isso definirá a seleção para todos os elementos selecionados com a classe CSS "país"
Se você deseja identificar melhor a seleção, precisará usar o ID/nome ou garantir que ele esteja aninhado de uma maneira que você pode ter certeza de que ele pode estar localizado.
por exemplo
$('form[name=myForm] select.country').val('FR');//presuming there is only one
É difícil dizer sem ver o restante da marcação na página, mas você precisa garantir que o UniQuness obtenha o elemento de seleção correto para que o ID seja geralmente a melhor aposta.
Se você pode usar o ID exato, pois isso tem o melhor perfrmance, no entanto, pediu opções, então aqui vai.
Algumas opções:
$('select.txtfield')
Encontrará todas as seleções com a classe txtfield, portanto, podem não ser únicas.
Uma aposta melhor talvez $('select.txtfield.country')
O que eu presumo é único?
ou um 'hack' para webforms é usar o seletor de extremidades com seletor
$('select[id$=personalInformation_country]')