2010-11-29 7 views
1

Wenn ich einen WebKit-Browser (Chrome oder Safari) verwende und den Standardwert eines Kontrollkästchens abrufe, wird "" zurückgegeben. Das gleiche Javascript in Firefox oder IE wird jedoch "on" zurückgegeben.Das Kontrollkästchen des Webkit-Kontrollkästchens ist null?

können also sagen, ich habe diese Checkbox auf einer Seite:

<input type="checkbox" id="chkDefaultValue"> 

ich dieses Javascript verwenden, um alle zurückzukehren „input“ Elemente auf einer Seite

var elems = document.getElementsByTagName('input'); 

Dann habe ich durch eine Schleife gehen, dass wird der Wert wie diese

elems[i].getAttribute('value') 

Wenn elems [i] das Kontrollkästchen, in Chrome oder Safari ist es "", aber firef zurück ox oder IE gibt es "on" zurück.

Gibt es eine Möglichkeit, Javascript zu verwenden, um den Wert "Ein" in Safari oder Chrome zurückzugeben? In Chrome verwende ich einen jquery-Aufruf, der .val() verwendet und der tatsächlich "on" zurückgibt, aber ich brauche eine Möglichkeit, dies mit Javascript in Safari zu tun.

Danke!

EDIT:

ich eigentlich bin für den „Wert“ Attribut speziell auf der Suche, da der „Wert“ eine Checkbox kann alles sein, wie „cat“ oder „Fahrrad“.

+0

haben Sie versucht, das value-Attribut dieses Steuerwerts = "on" zu machen? – marr75

Antwort

4

Verwenden Sie stattdessen checked, um zu sehen, ob ein Kontrollkästchen oder eine Funkeingabe ausgewählt ist.

Wenn Sie wirklich wollen, ist das value Attribut, und nicht zu sehen, wenn das Kontrollkästchen ausgewählt ist, dann müssen Sie zuerst set a value für das Kontrollkästchen. Wenn nichts eingestellt ist, ist das normale Verhalten null.

Sie können auch den Firefox und IE Verhalten nachzubilden, indem on sich als Standardwert zuweisen:

var myVal = elems[i].getAttribute('value'); 
if(myVal === null) 
    myVal = 'on'; 
+0

Ich suche eigentlich nach dem "value" -Attribut, da der "Wert" einer Checkbox alles sein kann, wie "cat" oder "bike". – sbonkosk

+0

@Sbonkosk Sie müssen zuerst einen Wert für das Kontrollkästchen festlegen. http://www.w3.org/TR/html401/interact/forms.html#adef-value-INPUT –

+0

Yeah Ich sah diesen Link, aber da FF und IE "auf" mit dem gleichen Javascript zurückkehren, möchte ich wissen Wenn es einen Weg gibt, den gleichen "Ein" -Wert in Chrome und Safari zu erhalten. – sbonkosk

0

Ich denke, dass es ist, weil elems[i].getAttribute('value') nicht das, was ist, sollten Sie den Zustand einer Checkbox erhalten werden.

Versuchen Sie, elems[i].getAttribute('checked') oder nur elems[i].checked zu verwenden, um den Status zu erhalten. Übrigens, elems[i].getAttribute('value') kann auf nur elems[i].value verkürzt werden.


lesen Sie Ihre Anmerkung an eine andere Antwort ...

Hier ist die Quelle für die .val() Anweisung aus dem Repo jQuery:

getVal = function(elem) 
{ 
    var type = elem.type, val = elem.value; 

    if (type === "radio" || type === "checkbox") 
    { 
    val = elem.checked; 
    } else if (type === "select-multiple") { 
    val = elem.selectedIndex > -1 ? jQuery.map(elem.options, function(elem) {return elem.selected;}).join("-"):""; 
    } else if (elem.nodeName.toLowerCase() === "select") { 
    val = elem.selectedIndex; 
    } 

    return val; 
} 

Das ist ziemlich einfach JavaScript, und man kann nur die .map() Funktion weglassen.


Auch, warum testet nicht nur für die Existenz der value Eigenschaft?

function niceValue(element) 
{ 
    if (element.value != '') 
    { 
    return element.value; 
    } elseif (element.checked) { 
    if (element.checked) 
    { 
     return 'on'; 
    } else { 
     return 'off'; 
    } 
    } 
} 

Viel Glück!

Verwandte Themen