Domanda

Ho un campo di selezione che è dinamicamente popolato con una chiamata AJAX che restituisce semplicemente tutti i selezionare le opzioni HTML. Ecco la parte del PHP che proprio eco è selezionare i tag e dinamico compila ogni opzione / valore.

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>";
}  

Dopo questa lista è popolata, sto cercando di chiamare un evento di modifica, in modo che ogni volta che l'opzione predefinita viene modificata nell'elenco SELECT o in un campo di testo con la stessa classe, si disattiva un pulsante di opzione impostato in un'altra parte della forma. (Potete vedere la domanda iniziale ho chiesto di ottenere questa parte della funzionalità di lavoro qui )

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

Per qualche ragione, anche se io do il campo di selezione il nome della classe appropriata (affector), quando seleziono diverse opzioni in campo, le altre parti del modulo non disattivano. Il campo di testo statico con la stessa classe funziona bene. Sono perplesso.

Tutte le idee?

È stato utile?

Soluzione

Basta commentato la tua ultima domanda ... Ecco quello che ho detto:

Utilizzare jQuery bind

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

Chiama addSelectChange nella funzione successo ajax. Si dovrebbe fare il trucco. Date un'occhiata a jQuery evento live troppo (per quando si desidera impostare eventi per tutti gli elementi DOM attuali e futuri in un progetto più tardi o qualcosa del genere). Purtroppo l'evento di modifica e pochi altri non sono ancora supportati con live. Bind è la prossima cosa migliore

Altri suggerimenti

A più aggiornato risposta ..

Poiché gli elementi sono popolate in modo dinamico, siete alla ricerca di evento delegazione .

Non utilizzare .live() / .bind() / .delegate(), però. Si dovrebbe usare .on() .

Secondo la jQuery documentazione API :

  

Al jQuery 1.7, il .on() metodo è il metodo preferito per fissare i gestori di eventi a un documento. Per le versioni precedenti, il .bind() Metodo viene utilizzato per collegare direttamente un gestore di eventi agli elementi. Gestori vengono fissati agli elementi attualmente selezionati nell'oggetto jQuery, quindi devono esistere tali elementi nel punto della chiamata a .bind() si verifica. Per la rilegatura evento più flessibile, si veda la discussione della delega evento nel .on() .

Quindi si può usare qualcosa di simile:

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

Un esempio utilizzando .Live ()

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

Per gli elementi che vengono inseriti in modo dinamico nel DOM, i loro eventi devono essere legati con

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

Questo perché quando si esegue $(function(){}); e legare gli eventi utilizzando $.click o $.change, ecc, si sono eventi a elementi di associazione già esistente nel DOM . Qualsiasi manipolazione si fa dopo che non viene influenzato da ciò che accade nella chiamata $(function(){});. $.bind dice la tua pagina per cercare elementi futuri nel selettore così come quelli attuali.

provare .Live: http://docs.jquery.com/Events/live

Dalla documentazione: Si lega un gestore ad un evento (come il clic) per tutti gli attuali - elemento abbinato - e il futuro. Può anche associare gli eventi personalizzati.

Ho trovato come soluzione per rendere unica

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

in php file / html e quindi generare opzioni per esso da ajax:

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

In options_generator.php opzioni di lettura solo:

echo "<option value='1'>1</option>";
echo "<option value='2'>2</option>";
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top