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?

Foi útil?

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]')
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top