2010-03-31 10 views
10

Il codice seguente funziona in FF, Safari, Chrome. Ma IE mi sta dando problemi.IE non rileva il metodo di cambio jQuery per la casella di controllo

Quando una casella di controllo è selezionata, non riesco a rilevare IE.

Semplicemente, non ricevo il popup di avviso, come previsto.
Ho anche provato in questo modo:

$("#checkbox_ID").change(function(){ 

    if($('#'+$(this).attr("id")'+:checked').attr('checked',false)) 
    { 
     var value = "1"; 
    } 
    else 
    { 
     var value = "0"; 
    } 
    alert(value); 

    return false; 
}); 

Ecco il semplice ingresso casella di controllo: <input class="prod" type="checkbox" name="checkbox_ID" id="checkbox_ID" value="1"/>

Qualcuno sa se IE richiede un metodo diverso jquery? o il mio codice è appena uscito?

risposta

5

Come notato da sblom con IE7 e sotto di voi hanno bisogno l'elemento di offuscare per questa azione al fuoco, successive versioni di IE e altri browser non è necessario che l'elemento perda esplicitamente lo stato attivo, la semplice modifica dovrebbe attivare questo evento (come mostrato nell'esempio seguente).

Credo che il problema potrebbe essere che si sta tentando di accedere alla variabile 'valore' quando è fuori ambito.

$("#checkbox_ID").change(function(){ 
var value; 
if($(this).is(':checked')) 
{ 
    value = "1"; 
} 
else 
{ 
    value = "0"; 
} 
alert(value); 

return false; 
}); 

Here is a working preview, notare che a causa ritorni falsi alla fine della funzione reimposta la casella di controllo al suo valore precedente, come è stato annullato l'effetto del click.

6

Probabilmente funzionerà se si fa clic da qualche altra parte dopo aver fatto clic sulla casella di controllo. IE è strano così.

potrebbe provare qualcosa di simile:

$(function() { 
    if ($.browser.msie) { 
    $('input:checkbox').click(function() { 
     this.blur(); 
     this.focus(); 
}); 

Maggiori informazioni qui: http://norman.walsh.name/2009/03/24/jQueryIE

+0

So che questo è inutile punto fuori (vedi cosa ho fatto lì?: P) come sono sicuro che questo è solo per l'OP per testare il loro codice. Ma dal momento che stai mappando i comandi sfocatura/messa a fuoco su un'azione di clic, per attivare un'azione di modifica, non avrebbe senso utilizzare solo l'azione di clic in questo caso? O se ritenevi che fosse necessario, dovresti probabilmente chiamare $ (this) .trigger ('change'); – Jay

+0

Questa idea ha funzionato benissimo per me. L'ho usato in prototypejs ... if (Prototype.Browser.IE) { el.observe ('click', funzione (e) { e.. Elemento() sfocatura(); e.element(). Focus(); }); } – apinstein

1

L'evento di modifica solo i fuochi quando il valore cambia dopo il controllo perde lo stato attivo. Per una casella di controllo è preferibile collegarsi all'evento click.

Ecco la documentazione relativa quando l'evento OnChange: link text

+0

L'evento click non è _quite_ lo stesso della modifica. Di solito è piuttosto vicino, quindi può funzionare bene. Ma ci sono modi per fare un clic in IE forzare il cambio da chiamare in caso di cambiamento in buona fede. – sblom

+1

Ecco ulteriori informazioni sull'evento di modifica. http://www.quirksmode.org/dom/events/change.html. – R0MANARMY

+0

Questo non è vero in tutti i casi, si prega di vedere sotto citazione dai documenti jQuery API. "Per le caselle di selezione, le caselle di controllo ei pulsanti di opzione, l'evento viene attivato immediatamente quando l'utente effettua una selezione con il mouse, ma per gli altri tipi l'evento viene posticipato finché l'elemento non si concentra." Citato da http://api.jquery.com/change/ – Jay

1

È necessario utilizzare l'evento propertychange anziché l'evento change. Tieni presente che l'evento propertychange verrà attivato su elementi diversi da selezionato/deselezionato. Per compensare questo, è necessario verificare la window.event.propertyName (per IE soltanto):

$(':checkbox').bind($.browser.msie ? 'propertychange': 'change', function(e) { 
    if (e.type == "change" || (e.type == "propertychange" && window.event.propertyName == "checked")) { 
     // your code here 
    } 
}); 
+0

Questo si interrompe su IE9 +. È necessario verificare la versione del browser per IE8 e versioni successive. – Muhd

0

provare a utilizzare

jQuery('#checkbox').click(handleFunc); 

invece di evento "cambiamento"

Problemi correlati