2016-07-30 94 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存在之前进行探测。 –