2009-07-15 15 views
0

Kann mir jemand erklären, warum ich document.getElementById ('id'). Value nicht innerhalb einer Funktion verwenden kann?Zurückgeben von Werten innerhalb einer JS-Funktion

Ich habe versucht, eine einfache Multiplikation Skript zu machen (im JS lernen, es ist eigentlich ein bisschen Spaß) und wurde schnell klar, wie lästiger Tipp dass ganz Codezeile nur ein Wert zurückzukehren, so schrieb ich eine kleine Funktion:

<script type="text/javascript"> 
function value(elementid){ 
return document.getElementById(elementid).value 
} 
</script> 

Dies funktioniert jedoch nicht und wird nur die Funktionalität meines ganzen Skripts brechen. Ich wollte einfach den Wert ('id') eingeben, um den Wert des Elements zurückzugeben.

Um es zu beheben, schlug ein Freund vor, ich entferne das .value in der Funktion und füge es an das Ende jeder Zeile, wo ich die Funktion stattdessen, wie Wert ('ID').

Warum hat mein erster Weg nicht funktioniert?

Danke für die Hilfe!

+0

Ich denke, die am besten, wenn Sie das gesamte Skript einfügen –

Antwort

5

Ändern Sie Ihren Funktionsnamen in etwas wie 'getValue'. Dieser Code funktioniert auf meinem Rechner: P

<html xmlns="http://www.w3.org/1999/xhtml" > 
<head> 
<script type="text/javascript"> 
    function getvalue(id) {return document.getElementById(id).value;} 
</script> 
</head> 
<body> 
    <input type="text" id="Text1" /> 
    <input type="button" onclick="alert(getvalue('Text1'))" /> <br /> 

    <input type="text" id="Text2" /> 
    <input type="button" onclick="alert(getvalue('Text2'))" /> <br /> 

    <input type="text" id="Text3" /> 
    <input type="button" onclick="alert(getvalue('Text3'))" /> <br /> 

</body> 
</html> 
0

Was Sie tun, sollte funktionieren. Was nennt das? Es ist möglich, dass sich Ihr Element nicht im DOM befindet, wenn Sie es anrufen. I.e. Aufruf in Inline-Skript vor dem eigentlichen Element.

+0

Im Grunde alles, was es, ruft aber nichts funktioniert tatsächlich. Sollte mein Skript in den Kopf oder so etwas sein? – Cyclone

+0

Das Skript kommt vor allem HTML, innerhalb des Körpers. – Cyclone

+0

Können Sie ein bestimmtes Beispiel als ein HTML-Snippet angeben, wo es aufgerufen wird, das nicht funktioniert? Wie andere bereits erwähnt haben, kann es etwas damit zu tun haben, dass das DOM zum Zeitpunkt des Anrufs noch nicht eingerichtet wurde. – JohnFx

2

Sind Sie sicher, dass das Element, das Sie bekommen, eine Wert-Eigenschaft hat und nicht etwas anderes wie .text oder ...?

Wenn es ein INPUT-Tag ist, können Sie mit .value und einigen anderen HTML-Steuerelemente auch kommen, aber für reguläre DIV, SPAN, etc. Ich glaube nicht, dass sie eine .value-Eigenschaft offen legen. Überprüfen Sie die Tag-Dokumentation, um zu sehen, ob sie .value unterstützen.

+0

Das war speziell für ein Eingabefeld, also IDK warum es nicht funktioniert hat. – Cyclone

+0

Ich kann nur daran denken, dem russischen Vorschlag zu folgen. Stellen Sie sicher, dass Sie Ihr JavaScript nicht aufrufen, bevor das Element erstellt wird. Haben Sie den Aufruf mindestens in ein Document/Body-Onload-Ereignis gehüllt? –

1

Ich glaube, Russau ist auf dem richtigen Weg. Sie können dies testen, indem Sie Ihr <Skript> Block an das Ende der Seite verschieben, da hoffentlich alles bis zu diesem Punkt geladen würde, wenn Sie nicht eine komplizierte Seitenstruktur haben.

1

Nicht jedes DOM-Element hat eine Eigenschaft mit dem Namen value. Dies könnte der Grund dafür sein, dass Ihr Skript bricht. Sie könnten Folgendes versuchen:

<script type="text/javascript"> 
    function value(elementid){ 
     var el = document.getElementById(elementid); 
     return el.value || el; 
    } 
</script> 

dies wird el.value zurückgeben, wenn es existiert oder wenn es nicht nur das Element. Dies ist nicht die eleganteste Lösung, aber es könnte Ihre anderen Skripte brechen. Ohne den Kontext zu kennen, in dem Sie diese Funktion aufrufen, kann ich Ihnen nicht weiterhelfen

-1

Änderung des Namen der Funktion von ‚Wert‘ auf etwas anderen

+0

Warum die Mühe zu wiederholen, was die angenommene Antwort sagt? – madth3

Verwandte Themen