2016-07-30 96 views
0

我正在編寫客戶端應用程序,該應用程序給出了配料會給你的雞尾酒配方。當輸入時,你點擊一個按鈕將搜索成分。如果輸入「全部」,您將被重定向到所有食譜的頁面。Javascript突然無法讀取值

我剛開始這個,所以注意全部功能是我所做的唯一部分。 它工作正常。實踐中,當你輸入「全部」時,它會重定向到Facebook的網址。無處不在(沒有新的變化),它開始向我拋出一個錯誤,它沒有讀取輸入,它讀取爲空。

相關的HTML:

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

的JS:

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

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

這裏發生了什麼?爲什麼它停止工作?

+1

因爲輸入值將是一個空字符串。將輸入變量賦值放入「整個」函數中。 – evolutionxbox

+0

類似於上述內容,我認爲這是因爲您沒有使用「準備就緒」或「加載」事件,然後鎖定輸入 –

+0

準備好或加載事件將無濟於事。輸入的值在分配後不會改變。 – evolutionxbox

回答

7

我們需要看到一個更好的背景知道肯定,但它似乎很可能太早獲取酒精值之前它包含最新值。

你可以改變這個使whole()功能的工作與酒精領域的當前值:

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

記住這一點:

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

在當時得到的電流值代碼行已運行。對該字段的任何未來更改都不會影響input變量。該變量僅包含特定時間點的值。避免這種問題最簡單的方法就是在需要的時候獲得正確的價值,而不是早一點。

+0

或者'var input = document.getElementById('alcohol');'保留對元素的引用,然後'input.value'來獲取它的當前值。 (假設JS在元素被解析後運行。) – nnnnnn

+0

jfriend00是正確的,它試圖在腳本加載時讀取值,並且在html存在之前進行探測。 –