9 Stimmen

onchange / onclick in einer Checkbox funktioniert nicht im IE

Ich habe den folgenden Code, der in Chrome/FF perfekt funktioniert:

chkbx_send_demo.onchange = function(){
    if(sel_template.selectedIndex <= 0 && chkbx_send_demo.checked == true){
        alert("Choose a Template");
        sel_template.selectedIndex = 1;
    }
    if(chkbx_send_demo.checked == false){
        sel_template.selectedIndex = 0;
     }
}

Aber im IE funktioniert es einfach nicht. Ich habe versucht, das Ereignis in chkbx_send_demo.onclick zu ändern und es funktioniert immer noch nicht.

1 Stimmen

Wahrscheinlich haben Sie das schon überprüft, aber: Sind Sie sicher, dass sich "chkbx_send_demo" auf das richtige Kontrollkästchen bezieht? Können Sie einen Alert ausführen und dies bestätigen? Funktioniert derselbe Code auch in FF?

16voto

GOsha Punkte 709

Der Internet Explorer löst das Ereignis onchange nur aus, wenn das Kontrollkästchen den Fokus verliert (onblur). siehe auch hier:
http://krijnhoetmer.nl/stuff/javascript/checkbox-onchange/
und hier:
http://bytes.com/topic/javascript/answers/92116-onchange-checkbox

1 Stimmen

Das Verhalten des IE ist gemäß der HTML-Spezifikation über onchange korrekt: "Das onchange-Ereignis tritt ein, wenn ein Steuerelement den Eingabefokus verliert und sein Wert seit dem Erhalt des Fokus geändert wurde. Dieses Attribut gilt für die folgenden Elemente: INPUT, SELECT und TEXTAREA." w3.org/TR/REC-html40/interact/scripts.html#adef-onchange

4voto

hetaoblog Punkte 1920

Ich hatte das gleiche Problem auf ie8, habe ich unten Trick, um es zu beheben. http://sleeplesscoding.blogspot.com/2010/01/fixing-ie-onchange-event-for-checkboxes.html

1voto

Nivas Punkte 17680

Sind Sie sicher, dass onclick funktioniert nicht ? Haben Sie nach Javascript-Fehlern gesucht?

Das Folgende funktioniert im IE7 (ich habe keinen IE6 zum Testen)

<html>
    <head>
       <script>
            function text()
            {
                alert(document.getElementById("cbxTest").checked);
            }
       </script>
    </head>
    <body>
        <input type="checkbox" name="cbxTest" id="cbxTest" onclick="text()"/>
        <label for="cbxTest"> Test </label>
    </body>
</html>

Hinweis: Dies gilt nur für onclick. OnChange funktioniert anders in IE, siehe GOsha's Antwort.

0 Stimmen

Ich bin 100% sicher, dass es nicht funktioniert (ich habe Warnungen in jedem Schritt der onclick-Funktion), aber seltsamerweise gibt es keine Javascript-Fehler, wenn ich das Skript debuggen.

0 Stimmen

Wahrscheinlich haben Sie das schon überprüft, aber: Sind Sie sicher, dass sich "chkbx_send_demo" auf das richtige Kontrollkästchen bezieht? Können Sie einen Alert ausführen und dies bestätigen? Funktioniert derselbe Code auch in FF?

0 Stimmen

Ich kann es nicht glauben, ich habe ein alert(chkbx_send_demo.type); und bekam ein 'hidden'... wie kann document.getElementById("demo") dieses Element bekommen: <input type="hidden" name="demo" value="0"> anstelle von diesem: <input type="checkbox" id="demo" name="demo" value="1" title='' tabindex="107" > ?? (und warum passiert das nur im IE??) Aber egal, danke, jetzt ist alles klar

0voto

Francisco Freitas Punkte 101

Mein JS-Code ist jetzt etwa so:

if(navigator.appName == "Microsoft Internet Explorer"){
            alert("IE");
            chkbx_send_demo.onclick = function(){
                alert("HI");
                if(sel_template.selectedIndex <= 0 && chkbx_send_demo.checked == true){
                    alert("Choose a Template");
                    sel_template.selectedIndex = 1;
                }
                if(chkbx_send_demo.checked == false){
                    alert("HI");
                    sel_template.selectedIndex = 0;
                }
                alert("HI");
            }
        }
        else
        {
            chkbx_send_demo.onchange = function(){
                if(sel_template.selectedIndex <= 0 && chkbx_send_demo.checked == true){
                    alert("Choose a Template");
                    sel_template.selectedIndex = 1;
                }
                if(chkbx_send_demo.checked == false){
                    sel_template.selectedIndex = 0;
                }
            }
        }

Keine Javascript-Fehler, aber der Code ist einfach nicht auf IE ausgeführt und ich kann wirklich nicht verstehen, warum.

0 Stimmen

Können Sie auch Ihr HTML posten? Wie haben Sie die chkbx_send_demo ?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X