2016-07-30 11 views
0

Ich bin dabei, eine Client-Seite App zu schreiben, die die Zutaten geben Ihnen Cocktail-Rezept geben. Wenn Sie auf eine Schaltfläche klicken, werden die Zutaten gesucht. Wenn "all" eingegeben wurde, werden Sie auf die Seite mit allen Rezepten weitergeleitet.Javascript kann plötzlich nicht lesen Wert

Ich hatte gerade damit begonnen, so dass die einzige Funktion, die ich gemacht habe, ist. Es hat gut funktioniert. Zum Üben hatte ich es, wenn du "alles" eingegeben hast, würde es auf facebooks URL umleiten. Aus dem Nichts (ohne neue Änderungen) fing es an, mir einen Fehler zu geben, es las nicht die Eingabe, es wurde als Null gelesen.

Die entsprechende HTML:

<input type="text" id="alcohol"> 
<h4 class="btn" type="submit" onclick="whole()"> Search</h4> 

Die JS:

var input = document.getElementById('alcohol').value; 

function whole() { 
    if (input == "all") { 
     window.location = "http://www.facebook.com"; 
    }; 
}; 

Was hier passiert? Warum hörte es auf zu arbeiten?

+1

Da der Eingabewert eine leere Zeichenfolge sein wird. Setzen Sie die Zuweisung der Eingabevariablen in die "ganze" Funktion. – evolutionxbox

+0

etwas wie oben, ich denke, es ist, weil Sie nicht "bereit" oder "load" -Ereignisse verwenden und dann zielen auf die Eingabe –

+0

Ein bereit oder laden Ereignis wird nicht helfen. Der Wert der Eingabe ändert sich nicht, sobald er zugewiesen wurde. – evolutionxbox

Antwort

7

Wir müssen einen größeren Zusammenhang sehen, um sicher zu sein, aber es scheint, dass Sie wahrscheinlich den Alkoholwert zu früh bekommen, bevor er den neuesten Wert enthält.

Sie können dies ändern, um die whole() Funktion Arbeit mit dem aktuellen Wert des Alkohols Feldes zu machen:

function whole(){ 
    var input = document.getElementById('alcohol').value; 
    if (input =="all"){ 
     window.location="http://www.facebook.com"; 
    }; 
    }; 

Denken Sie daran, dass dies:

var input = document.getElementById('alcohol').value; 

den aktuellen Wert zu dem Zeitpunkt ab, der Codezeile wird ausgeführt. Alle zukünftigen Änderungen an diesem Feld wirken sich nicht auf die Variable input aus. Diese Variable enthält nur den Wert von einem bestimmten Zeitpunkt. Der einfachste Weg, um Probleme wie diese zu vermeiden, besteht darin, den Wert genau dann zu erhalten, wenn Sie ihn brauchen, und nicht früher.

+0

Oder 'var input = document.getElementById ('alkohol');' um einen Verweis auf das Element zu behalten, dann 'input.value', um den aktuellen Wert zu erhalten. (Angenommen, die JS wird ausgeführt, nachdem die Elemente analysiert wurden.) – nnnnnn

+0

jfriend00 ist korrekt, es versucht, den Wert zu lesen, wenn das Skript geladen wird, und das ist wahrscheinlich, bevor die HTML existiert. –