2012-07-31 7 views
13

Ich verwende JavaScript zum Deaktivieren einer Schaltfläche. Funktioniert in IE, aber nicht in FireFox und Chrom, hier ist das Skript, was ich arbeite:document.getElementById ('btnid'). Disabled funktioniert nicht in Firefox und chrome

function disbtn(e) { 
    if (someCondition == true) { 
     document.getElementById('btn1').disabled = true; 
    } else { 
     document.getElementById('btn1').disabled = false; 
    } 

Und in meinem html Ich habe:

<input type="button" id="btn1" value="submit" /> 
+0

Nichts ist falsch damit. Wie funktioniert es nicht? – Utkanos

+0

Button deaktivieren und aktivieren funktioniert einwandfrei in IE. Aber in Firefox und Chrome passiert nichts. In diesen beiden Browsern ist die Schaltfläche nur aktiviert. – steeve

+0

@Spencer: Verwenden Sie 'setAttribute()' und 'removeAttribute()' wie in meiner Antwort unten angegeben. –

Antwort

33

Verwendung setAttribute() und removeAttribute()

function disbtn(e) { 
    if (someCondition == true) { 
     document.getElementById('btn1').setAttribute("disabled","disabled"); 
    } else { 
     document.getElementById('btn1').removeAttribute("disabled"); 
    } 
} 

SEE DEMO

+0

@AK: Ihre Geige funktioniert gut in ff und Chrom, aber auf meiner Seite, das gleiche Problem ist Rendern ... Ich bin jetzt ahnungslos :( – steeve

+0

können Sie den vollen Code teilen? –

+0

@AK: Huh ... Es ist funktioniert jetzt gut. Ich habe den Funktionsnamen umbenannt. Es funktioniert jetzt. Scheint interessant ... (Mein alter Funktionsname ist getSelection. Ich weiß nicht, was mit diesem Namen falsch ist.) Vielen Dank A K ... :) – steeve

0

Es gibt immer wieder seltsame Probleme mit Browser Unterstützung von getElementById, versuchen Sie folgendes statt mit:

// document.getElementsBySelector are part of the prototype.js library available at http://api.prototypejs.org/dom/Element/prototype/getElementsBySelector/ 

function disbtn(e) { 
    if (someCondition == true) { 
     document.getElementsBySelector("#btn1")[0].setAttribute("disabled", "disabled"); 
    } else { 
     document.getElementsBySelector("#btn1")[0].removeAttribute("disabled"); 
    }  
} 

Alternativ umarmen jQuery, wo man einfach dies tun könnte:

+1

"Es gibt immer seltsame Probleme mit der Browser-Unterstützung von getElementById" - Ya? Was? Es ist einer der am konsequentesten implementierten Teile der Spezifikation! ... im Gegensatz zu getElementsBySelector, von dem mein Browser nichts weiß. – Quentin

+0

Und wenn dieser jQuery-Code tatsächlich funktioniert, dann ist meine Abneigung gegen die Bibliothek gerade gestiegen. Beides sind ungültige Werte für das Attribut, aber die Fehlerbehandlung sollte behandeln, das deaktivierte Attribut auf "falsch" zu setzen, genauso wie es auf "deaktiviert" gesetzt wird. – Quentin

+0

@Quentin du hast absolut Recht, mein Code war falsch (das Ergebnis von Niesen eine Idee ohne vorherige Gedanken) Ich habe die Korrekturen vorgenommen. –

3

Versuchen Sie, die disabled direkt Attribut:

if (someCondition == true) { 
    document.getElementById('btn1').setAttribute('disabled', 'disabled'); 
} else { 
    document.getElementById('btn1').removeAttribute('disabled'); 
} 
0

einige Zeit einige Javascript-Funktionen funktionieren nicht auf einem spezifischen Browser. Ich würde Ihnen vorschlagen, mit JQuery zu starten, die Sie normalisierte JS gibt, von anderen Browser Anforderung kümmert

$('#btn1').each(function(){ 
    this.disabled = false; 
}); 
-1

treu bleiben nativen (Boolean) Eigenschaft Unterstützung und seiner Syntax wie:

[Elem ] .disabled = Bedingung? wahr falsch; // fertig!

und für unsere eigene gute kollektive Codierung Erfahrung, bitte darauf bestehen, andere auch zu unterstützen.

0

Eine weitere Alternative:

document.formname.elementname.disabled=true 

Arbeiten an FF und IE! :)

-1

Ich habe alle Möglichkeiten ausprobiert. Nichts funktionierte für mich außer dem Folgenden. var Element = document.querySelectorAll ("Eingabe [ID = Btn1]"); Element [0] .setAttribute ("deaktiviert", wahr);