2016-07-30 5 views
0

나는 클라이언트 측 응용 프로그램을 작성하는 과정에서 성분이 주어진다면 칵테일 제조법을 제공 할 것입니다. 입력하면 성분을 검색하는 버튼을 클릭합니다. "모두"를 입력하면 모든 요리법이 포함 된 페이지로 리디렉션됩니다.Javascript가 갑자기 값을 읽을 수 없습니다.

나는 이것을 시작 했으므로 모든 기능이 내가 한 유일한 부분이다. 잘 작동했습니다. 연습을 위해 나는 페이스 북의 URL로 리다이렉트하는 "all"을 입력했을 때 그것을 가지고있었습니다. 아무데도 (새로운 변경 사항없이) 그것은 나를 오류를 던지기 시작했다. 입력을 읽지 않고, null로 읽었다.

관련 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이 존재하기 전에는 프로 버를 사용합니다. –

관련 문제