2012-06-17 11 views
9

mam grupę radio z onChange Handler:IE8 i IE7 onchange zdarzenie jest wywoływane tylko po wielokrotnym wybór

<input type="radio" name="Q12" value="radio" id="Q12_0" onchange="nextPnl('Q12');"> 
<br/> 
<input type="radio" name="Q12" value="radio" id="Q12_1" onchange="nextPnl('Q12');"> 
     ​ 

function nextPnl(did) 
{ 
document.write(did); 

}​ 

Problem polega na tym, że w IE8 & IE7 onchange zdarzenie jest wywoływane tylko po wielokrotnym wybór .

Proszę zobaczyć tę prezentację narzędziami programistycznymi IE Browser Mode] [IE8: http://jsfiddle.net/3zwur/2/

+0

można znaleźć ogólne rozwiązanie dla IE7/IE8 * * onchange zdarzenie błąd w tym artykule [] (http://sleeplesscoding.blogspot.ro/2010/01/fixing-ie-onchange-event- dla-checkboxes.html). –

Odpowiedz

16

Jest to spowodowane błędem z IE7 i IE8 wydarzeń zmieni. Zamiast tego należy posłuchać zdarzenia click.

Jak pokazano w tym table on quirks mode, zmiana zdarzenia na przyciskach radiowych i polach wyboru jest dość błędna w IE7 i IE8.

Można słuchać zdarzenia click tak:

<input type="radio" name="Q12" value="radio" id="Q12_0" onclick="nextPnl('Q12');"> 
<br> 
<input type="radio" name="Q12" value="radio" id="Q12_1" onclick="nextPnl('Q12');"> 

i widelec swojego skrzypce: http://jsfiddle.net/T7VYL/

zwykle przy użyciu biblioteki javascript, takich jak JQuery i YUI ułatwić Ci życie, chociaż z moich testów nie naprawiają tego błędu w starszych wersjach IE.

Jeśli nadal chcesz odsłuchać wydarzenie zmiany, możesz wdrożyć tę poprawkę: http://www.ridgesolutions.ie/index.php/2011/03/02/ie8-chage-jquery-event-not-firing/. Zasadniczo nasłuchuje zdarzenia kliknięcia, a następnie powoduje, że element wywołuje zdarzenie zmiany.

Jak wykazały Pytający za ryba: http://jsfiddle.net/3zwur/3

+0

Właśnie przetestowałem JQuery i YUI3 i niestety nie naprawiają tego błędu w starszych wersjach IE. Twoim rozwiązaniem jest wysłuchanie zdarzenia kliknięcia lub wywołanie zdarzenia zmiany, tak jak to: http://www.ridgesolutions.ie/index.php/2011/03/02/ie8-chage-jquery-event-not- wypalanie/ – F21

+0

http://jsfiddle.net/3zwur/3/ –

+0

To przedwcześnie zwolniło mnie - kliknięcie jest rejestrowane przed wyświetleniem okna dialogowego wprowadzania pliku. Moim rozwiązaniem było wykonanie funkcji zmiany na 'setTimeout' 0 milisekund po kliknięciu, nadużywanie asynchroniczności w celu umożliwienia wyczyszczenia stosu (i akcji wejściowej pliku do rozstrzygnięcia) zanim to nastąpi:' onchange = "setTimeout (function deferNextPnl() {nextPnl ('Q12')}, 0) "'. – Barney

3

Inną opcją jest posiadanie onchange jak już masz, i dodać zdarzenie onclick, który usuwa skupienie z przycisku radiowego:

<input type="radio" name="Q12" value="radio" id="Q12_0" onclick="this.blur()" onchange="nextPnl('Q12');"> 
0

Another rozwiązaniem jest umieszczenie zdarzenia onchange w załączającym formularzu za pośrednictwem jQuery.

$('#form').on('change', function() { 
    $(this).submit(); 
}); 
Powiązane problemy