2012-02-17 17 views
7

Utilizzando jQuery 1.7.1, sto tentando di creare un gestore eventi per l'evento di modifica in un menu a discesa. Il menu a discesa viene aggiunto dinamicamente al DOM. Sembra funzionare bene sulla maggior parte dei browser, ma oh quel KEY IE8 vuole essere difficile. C'è una soluzione? Dovrebbe questo lavoro? Sto facendo molte letture qui e altrove e l'input sembra essere in conflitto in molti casi e le soluzioni proposte che ho trovato/provato non hanno funzionato per me.jQuery su() modifica in IE8

Qualcuno può chiarire se questo dovrebbe funzionare in IE8 per i dropdown .state-seletor creati al volo?

$(document).on('change', '.state-selector', function(e) { 
    e.preventDefault(); 
    alert('ON()'); 
}); 

Terrò rovistando, ma se qualcuno può chiarire la situazione prima che perda la mente, lo apprezzerei.

Grazie.

UPDATE

A @ richiesta di Wertisdk qui di seguito, ecco il mio frammento di discesa:

<select name="data[Contractor][service_area_state]" class="state-selector"> 
    <option value="">Select a state...</option> 
    <option value="AK">Alaska</option> 
    <option value="AL">Alabama</option> 
    ... 
    <option value="WI">Wisconsin</option> 
    <option value="WV">West Virginia</option> 
    <option value="WY">Wyoming</option> 
</select> 

UPDATE 2

Per punto di @ mblase75, forse il metodo utilizzato per generare la dinamica dropdown conta. Essenzialmente, sto clonando un nodo DOM esistente e svuotando il valore che è stato selezionato lì. Va notato che anche lo .additionalink a viene generato dinamicamente. Quando si fa clic su un .addtionallink a, il modello viene clonato include una nuova .addtionallink a nodo:

$(document).on('click', '.additionallink a', function(e) { 
    e.preventDefault(); 

    var copy = $(this).closest('.template').clone(); 

    // Massage the template copy's content and insert it 
    // - Clear the value selected in the original dropdown 
    // - Clear the list of counties loaded based on the original dropdown selection 
    $('.state-selector', copy).val($('.state-selector option:first', copy).val()); 
    $('.counties', copy).empty(); 
    $(this).closest('.template').after(copy); 
}); 

UPDATE 3

Ecco una simile JSFiddle. È quasi il mio codice, ma c'è una differenza fondamentale che potrebbe essere tutta la differenza. Questo violino usa .append() per inserire nuovi contenuti in base alla selezione dello stato. Il mio codice utilizza il metodo .load(). Altrimenti, è lo stesso.

+0

potete inviare un frammento del HTML, il jQuery sta per interagire con? Potrebbe essere specifico per l'elemento html che hai scelto come target. – Wertisdk

+0

Non vedo l'ora di questa risposta. Ho lo stesso problema. –

+0

@Wertisdk, ho aggiornato la mia domanda sopra. Non sono sicuro di quanto sia utile, ma chiedi e riceverai (a volte). :-) –

risposta

1

Credo che la parola magica è .clone(), potrebbe essere in esecuzione in questo bug, che è già stato fissato nella versione beta 1.7.2: http://bugs.jquery.com/ticket/11076

+0

Il ticket non indica che è specifico per IE8 che è sicuramente quello che sto vedendo. Ho dimenticato qualcosa? –

+0

Prova il tuo codice con http://code.jquery.com/jquery-git.js e verifica se funziona. –

+0

Yessuh, sicuramente sembra. Strano che il bug specifico per IE8 (almeno per me). Farò un po 'più di prove, ma i primi segni sono buoni. –