2012-10-05 4 views
0

내 페이지의 모든 내용이 완벽하게 작동합니다. 경고 (userinput.value); 완벽하게 작동하지만 문장은 버튼을 호출하지 않습니다. 이 코드는 else 문에서 유효한 명령 만 반환합니다.If-else 문이 작동하지 않습니다. JavaScript의 사례를 무시하고 싶습니다.

 function btn_go_click(){ 
      var userinput = document.getElementById("txtcommand"); 
      alert(userinput.value);   
      if (userinput.value === ("N" || "North")){ 
       btn_North_click();     
      }else if (userinput.value === ("E" || "East")){ 
       btn_East_click(); 
      }else if (userinput.value === ("S" || "South")){ 
       btn_South_click(); 
      }else if (userinput.value === ("W" || "West")){ 
       btn_West_click();      
      }else{ 
      UpdateText ("Valid commands are \"n\", \"e\", \"s\", \"w\"");     
      } 
     } 

답변

6

("N" || "North")의 결과는 항상 "N" 될 것입니다. (이 경우 무시)

if (userinput.value === "N" || userinput.value === "North") 

을 아니면 아래와 같이 작성할 수 있습니다 :

if (['n', 'north'].indexOf(userinput.value.toLowerCase()) > -1) { 

} // ... and so on 
0

당신이 만약

그래서 if (userinput.value === ("N" || "North")), 당신은 쓸 필요가 단지 같은

if (userinput.value === "N")

과 같다 사건을 무시하고 싶다면 가장 쉬운 방법은 모든 것을 대문자로하는 것입니다.
val valueToCompare = userinput.value.toUpperCase(); 

은 그럼 그냥 대문자 (대신 "북한"의 "NORTH")에 대한 모든 값을 사용하고 심지어 사용자 입력의 케이스에 대해 걱정 할 필요가 없습니다.

if가 손상되었습니다. 여기에 코드를 수정 : 당신이 사건을 무시하려는 경우 낮추기 위해 모든 것을 나 대문자로 변환하거나, 예를 들어, 케이스를 무시하고 정규 표현식을 사용할 수 있습니다

function btn_go_click(){ 
    var userinput = document.getElementById("txtcommand").value.toUpperCase(); 
    alert(userinput.value);   
    if (userinput === "N" || userinput === "NORTH") { 
     btn_North_click();     
    } else if (userinput === "E" || userinput === "EAST") { 
     btn_East_click(); 
    } else if (userinput === "S" || userinput === "SOUTH") { 
     btn_South_click(); 
    } else if (userinput === "W" || userinput === "WEST") { 
     btn_West_click();      
    } else { 
     UpdateText ("Valid commands are \"n\", \"e\", \"s\", \"w\""); 
    } 
} 
0

function btn_go_click(){ 
    var userinput = document.getElementById("txtcommand"); 
    var value = userinput.value.toLowerCase(); 

    if (value == "n" || value == "north") 

또는

var reN = /^(n|north)$/i; 

    if (reN.test(value)) 

당신은 최고의 너무 너무 매칭이 개선되어 입력에서 후행 공백을 트리밍 할 수 있습니다.

0

나는 이것이 주석이어야한다는 것을 알고있다. 주석을 달기에는 너무 길다.

어드벤처 게임을 만드는 경우 큰 "if-then"을 만들려고하지 말고 "명령 목록"을 만드는 것이 좋습니다. 인스턴스

var cmds = [ 
    { 
    keywords: ["n", "north"], 
    help: "Move north, if you can.", 
    func: move_north 
    }, 
    { 
    keywords: ["get", "take"], 
    help: "take an object.", 
    func: get_object 
    } 
]; 

이러한 접근 방식은 또한 당신에게 내장 된 명령 목록과 도움말 파일을 제공 들어

.

또한 나는 전체 단어를 입력 할 필요가 없도록 명령 파서가 3 글자로 된 단축키를 사용하는 것을 좋아합니다. 그러나 그것은 단지 입힌 것입니다.

관련 문제