2012-06-04 23 views
5

voglio sparare un evento OnChange per tutti i cambiamenti di elementi modulo all'interno di un DIVnon onChange sparare in IE

Ecco il frammento di

<html> 
<body> 

<div id="container"> 
    <input type="checkbox"/> 
    <input type="checkbox"/> 
    <input type="text"/> 
    <input type="text"/> 
</div> 

<script> 
di = document.getElementById("container"); 
di.onchange = function(a){ 
alert("On Change Called"); 
} 

di.onclick = function(a){ 
alert("On Click Called"); 
} 

</script> 

</body> 
</html> 

L'evento viene generato quando un focus è persa da uno qualsiasi degli elementi del modulo a un nuovo elemento del modulo, quando alcuni contenuti vengono aggiornati (ad esempio: la casella di input viene aggiornata)

Il codice sopra funziona perfettamente per tutti i browser, ma non per IE, in qualsiasi modo per farlo è IE

+1

possibile duplicato di [evento onchange non bolle in MSIE. Dove trovo un grafico che elenca tutti questi eventi] (http://stackoverflow.com/questions/1552689/onchange-event-doest-not-bubble-in-msie-where-do-i-find-a-chart- listing-all-suc) – Strelok

+0

Mi raccomando di usare jQuery per evitare questi problemi di browser, ma ciò non significa che si dovrebbe saltare il test. [Jquery su Cambia riferimento qui.] (Http: //api.jquery.com/change /) Scott Leberknight's on onChange [http://www.nofluffjuststuff.com/blog/scott_leberknight/2005/04/onclick_versus_onchange_in_ie_and_firefox](http://www.nofluffjuststuff.com/blog/scott_leberknight/2005/04/ onclick_versus_onchange_in_ie_and_firefox) – xivo

risposta

7

In realtà, IE, in particolare IE7/8 non supporta l'evento onchange molto bene. Ti consiglio di utilizzare l'evento onclick.

+2

Perfetto, questo ha risolto il mio problema. Non c'è bisogno di usare jQuery. –

1

Evitare di utilizzare .focus() o .select() prima .Per passare() funzione del jquery per IE, allora funziona bene, im utilizzando nel mio sito.

Grazie

0

Per lo più tutti i web developer devono aver affrontato questo problema .. yeh la versione precedente di Internet Explorer a volte non generare l'evento onChange e la sua sostituzione con onClick opere.

Ma questo non è previsto con l'ultimo IE 11. quello che ho trovato nel mio caso era il nome della funzione che veniva chiamato su onChange evento si stava scontrando da qualche parte. L'ho appena cambiato con un altro nome che dovrebbe sembrare unico nell'intero contesto, quindi ha funzionato.

Conclusione: IE 11 ottenendo confuso quando trova alcuni nomi simili all'interno del sistema di abbinamento con la funzione onchange bersaglio (anche i nomi dei file credo), mentre gli altri browser sono intelligenti abbastanza .

+0

Nel mio caso, la mia macchina di sviluppo in esecuzione su Windows 10 + IE11 (KB3203621), onchange attivato perfettamente. Ma quando lo distribuisco alla produzione, test fatto su Windows 7 + IE11 (KB2841134), onchange si rifiuta di funzionare. Ma in qualche modo onKeyPress ha funzionato sia sulla macchina di sviluppo che sull'ambiente di produzione. Potrebbe essere correlato a quella versione di aggiornamento? – mutanic

+0

@mutanic yeh .. molto probabilmente .. hanno risolto questo problema ma nell'ultima versione. –

0

In realtà Onchange non funziona molto bene in IE. Ecco cosa ho fatto durante l'utilizzo di Javascript. Puoi replicarlo di conseguenza.

  1. Aggiungi evento on-line in HTML per chiamare la funzione chiamata ora, invece di onchange.
  2. Aggiungere il seguente codice nel tuo js file di

    document.getElementById('--your selector--').ondragover = handle; 
    
    function handle(evt) 
    { 
        evt.stopPropagation(); 
        evt.preventDefault(); 
        evt.dataTransfer.dropEffect = 'copy' 
    } 
    
  3. L'OnDragOver sarà reso false codice di cui sopra, e quindi OnDrop sarà sparare su tutti i browser e chiamare la funzione richiesta