Pergunta

Eu tenho um campo selecionado que é preenchido dinamicamente com uma chamada AJAX que simplesmente retorna todas as opções de seleção HTML. Aqui está a parte do PHP que apenas ecoa as tags selecionadas e preenche dinamicamente cada opção/valor.

echo "<select name='player1' class='affector'>";
echo "<option value='' selected>--".sizeof($start)." PLAYERS LOADED--</option>";

foreach ($start as $value) {
    echo "<option value='".$value."'>".$value."</option>";
 }  
  echo "</select>";
}  

Depois que esta lista é preenchida, estou tentando chamar um evento de alteração, para que sempre que a opção padrão seja alterada na lista de seleção ou em um campo de texto com a mesma classe, ela desativa um botão de rádio definido em outra parte do formulário . (Você pode ver a pergunta inicial que pedi para obter essa parte da funcionalidade funcionando aqui)

$('.affector').change(function(){
       $(this).parents('tr').find('input:radio').attr('disabled', false);
});

Por algum motivo, mesmo que eu dê ao campo selecionar o nome da classe apropriado (afetor), quando seleciono diferentes opções no campo, as outras partes do formulário não desativam. O campo de texto estático com a mesma classe funciona bem. Estou perplexo.

Alguma ideia?

Foi útil?

Solução

Acabei de comentar sua última pergunta ... aqui está o que eu disse:

Use jQuery bind

function addSelectChange() {
   $('select').bind('change', function() {
       // yada yada
   });
} 

Ligue para AddSelectChange em sua função de sucesso do Ajax. Deve fazer o truque. Dê uma olhada no JQuery Live Event também (para quando você deseja definir eventos para todos os elementos DOM atuais e futuros em um projeto posterior ou algo assim). Infelizmente, o evento de mudança e alguns outros ainda não são apoiados no Live. Bind é a próxima melhor coisa

Outras dicas

Uma resposta mais atualizada ..

Como os elementos são preenchidos dinamicamente, você está procurando delegação de eventos.

Não use .live()/.bind()/.delegate(), no entanto. Você deveria usar .on().

De acordo com JQuery API Docs:

A partir de jQuery 1.7, o .on() O método é o método preferido para anexar manipuladores de eventos a um documento. Para versões anteriores, o .bind() O método é usado para anexar um manipulador de eventos diretamente aos elementos. Os manipuladores são anexados aos elementos atualmente selecionados no objeto jQuery, para que esses elementos devem existir no ponto em que a chamada para .bind() ocorre. Para uma ligação mais flexível de eventos, consulte a discussão da delegação de eventos em .on().

Portanto, você usaria algo assim:

$(document).on('change', 'select', function (e) {
    /* ... */
});

Um exemplo usando .live ()

$('#my_form_id select[name^="my_select_name"]').live('change', (function () {
    console.log( $("option:selected", this).val());
    })
 );

Para itens que são inseridos dinamicamente no DOM, seus eventos devem estar vinculados a

$('.selector').bind('change',function() { doWork() });

Isso ocorre porque quando você corre $(function(){}); e vincular eventos usando $.click ou $.change, etc., você está vinculando eventos aos elementos já existe no DOM. Qualquer manipulação que você faça depois disso não é afetada pelo que quer que aconteça no $(function(){}); ligar. $.bind Diga à sua página para procurar elementos futuros em seu seletor, bem como atuais.

tente .Live:http://docs.jquery.com/events/live

De Docs: Ligna um manipulador a um evento (como clique) para todo o elemento atual - e futuro - correspondente. Também pode vincular eventos personalizados.

Eu encontrei como solução para fazer apenas

<select id="myselect"></select> 

no arquivo php/html e, em seguida, gera opções para ele por Ajax:

$.post("options_generator.php", function (data) { $("#myselect").append(data); });

Nas opções de eco Options_generator.php apenas:

echo "<option value='1'>1</option>";
echo "<option value='2'>2</option>";
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top