1

出于某种原因,如果在 if 之后,它会继续,除了 ifs 将您带到不同的地方,这是我目前拥有的代码

<script type="text/javascript">
    function whatname(button) {
        var post = prompt("Name?", "Visitor")
        if(post == "Nick"){
            alert("Hi Nick")
            window.location = "index.html"
        }
        if(post == "Visitor"){
            alert("Welcome Visitor")
            window.location = "index.html"
        }
        if(post == ""){
            alert("Please Enter Name")
        }
        if(post == null){
            alert("Closing")
        }
        if(post == "show me a secret"){
            window.location = "secret.html"
        }
        if(post == "Greg"){
            alert("Test")
        }
        if(post == "greg"){
            alert("Test 1")
        }
        else{
            alert("Welcome " + post + ", Have Fun!")
            window.location = "index.html"
        }
    }
</script>

在 if 发生之后,它会继续,比如假设我单击取消(这将是 null)它会说“正在关闭”,但是会出现另一个弹出窗口并说“欢迎 Null,玩得开心!” 比它带我去别的地方,我不知道出了什么问题,如果你能帮忙,那就太好了。

4

8 回答 8

8

使用else if而不是if

if(condition 1) {
} else if(condition 2) {
} else {
}

现在发生的事情是它首先检查是否post是“尼克”。不管它是否是,它都会继续检查是否post是“访客”。这当然不是你想要的。如果发现第一个测试是错误的,您只想执行第二个测试。

如所写,只有最后一条if语句有else. 您将收到“欢迎,玩得开心”的消息,只要post不是greg.

于 2012-08-21T14:56:17.163 回答
2

因为 else 只适用于你的最后一个 if。

<script type="text/javascript">
    function whatname(button) {
        var post = prompt("Name?", "Visitor")
        if(post == "Nick"){
            alert("Hi Nick")
            window.location = "index.html"
        }
        else if(post == "Visitor"){
            alert("Welcome Visitor")
            window.location = "index.html"
        }
        else if(post == ""){
            alert("Please Enter Name")
        }
        else if(post == null){
            alert("Closing")
        }
        else if(post == "show me a secret"){
            window.location = "secret.html"
        }
        else if(post == "Greg"){
            alert("Test")
        }
        else if(post == "greg"){
            alert("Test 1")
        }
        else{
            alert("Welcome " + post + ", Have Fun!")
            window.location = "index.html"
        }
    }
</script>

这样它只会执行其中一个代码块。

或者更好的是,更改为使用 switch 语句 http://jsfiddle.net/qsQvs/

<script type="text/javascript">
function whatname(button) {
    var post = prompt("Name?", "Visitor");

    switch (post) {
    case "Nick":
        {
            alert("Hi Nick");
            window.location = "index.html";
            break;
        }
    case "Visitor":
        {
            alert("Welcome Visitor");
            window.location = "index.html";
            break;
        }
    case "":
        {
            alert("Please Enter Name");
            break;
        }
    case "show me a secret":
        {
            window.location = "secret.html";
            break;
        }
    case "Greg":
        {
            alert("Test");
            break;
        }
    case "greg":
        {
            alert("Test 1");
            break;
        }
    default:
        {
            alert("Welcome " + post + ", Have Fun!");
            window.location = "index.html";
        }
    };
}
</script>
于 2012-08-21T14:58:59.207 回答
1

目前您有 7 个不同的条件块,而这else只是最后一个的一部分。在这种情况下,由于您真正想要的是 1 个带有 8 个分支的条件块,因此您应该使用else if而不是if中间的 6 个:

if(post == "Nick") {
   alert("Hi Nick")
   window.location = "index.html"
} else if(post == "Visitor") {
    alert("Welcome Visitor")
    window.location = "index.html"
}

    [...]

else {
    alert("Welcome " + post + ", Have Fun!")
    window.location = "index.html"
}

此外,由于您将同一个变量与一堆不同的东西进行比较,我更愿意将其写成一个开关,但这是一个口味问题:

switch(post)
{
    case "nick":
        alert("Hi Nick")
        window.location = "index.html"
        break;

    [...]

    default:
        alert("Welcome " + post + ", Have Fun!")
        window.location = "index.html"
        break;
}
于 2012-08-21T14:57:53.577 回答
1

如果 IF 上只有 ONE 必须发生(或 else),您必须使用else if. 现在, else 仅适用于“greg” IF。

if(post == "Nick"){
    alert("Hi Nick")
    window.location = "index.html"
}
else if(post == "Visitor"){
    alert("Welcome Visitor")
    window.location = "index.html"
}
else if(post == ""){
    alert("Please Enter Name")
}
else if(post == null){
    alert("Closing")
}
else if(post == "show me a secret"){
    window.location = "secret.html"
}
else if(post == "Greg"){
    alert("Test")
}
else if(post == "greg"){
    alert("Test 1")
}
else{
    alert("Welcome " + post + ", Have Fun!")
    window.location = "index.html"
}

当心!

于 2012-08-21T14:58:20.813 回答
1

else当前仅在最后一个if没有触发触发。不管其他 if人是否触发,它都不在乎。

如果您知道它应该只是其中之一,else请在每个 if 之前放置 s:

if(post == "Nick"){
    alert("Hi Nick")
    window.location = "index.html"
}
else if(post == "Visitor"){   //Now this will only be considered if the first failed
    alert("Welcome Visitor")
    window.location = "index.html"
}

这样,只有在所有其他方法都失败时才会考虑最后的 else

于 2012-08-21T14:58:24.400 回答
1

一个else块只与它的前一个块相关联if,这意味着您的所有其他if块都是相互独立的。用于else if创建多个互斥选项。

但是请注意,您不会else if在 JavaScript (ECMAScript) 规范中找到任何提及。这不是它自己的。但是每个else 都与最近的可能相关联ifnoelse,这允许您将多个条件串在一起。

换句话说,这:

if (post == "Nick") {
    alert("Hi Nick")
    window.location = "index.html"
}
else if (post == "Visitor") {
    alert("Welcome Visitor")
    window.location = "index.html"
}
else if (post == "") {
    alert("Please Enter Name")
}
else {
    alert("Welcome " + post + ", Have Fun!")
    window.location = "index.html"
}

...等价于:

if (post == "Nick") {
    alert("Hi Nick")
    window.location = "index.html"
}
else {
    if (post == "Visitor") {
        alert("Welcome Visitor")
        window.location = "index.html"
    }
    else {
        if (post == ""){
            alert("Please Enter Name")
        }
        else {
            alert("Welcome " + post + ", Have Fun!")
            window.location = "index.html"
        }
    }
}
于 2012-08-21T14:58:41.190 回答
0

我认为你犯了一个小错误试试这个代码:

function whatname(button) {
    var post = prompt("Name?", "Visitor")

    if(post == "Nick"){
        alert("Hi Nick")
        window.location = "index.html"
    }
    else if(post == "Visitor"){
        alert("Welcome Visitor")
        window.location = "index.html"
    }
    else if(post == ""){
        alert("Please Enter Name")
    }
    else if(post == null){
        alert("Closing")
    }
    else if(post == "show me a secret"){
        window.location = "secret.html"
    }
    else if(post == "Greg"){
        alert("Test")
    }
    else if(post == "greg"){
        alert("Test 1")
    }
    else{
        alert("Welcome " + post + ", Have Fun!")
        window.location = "index.html"
    }
}
于 2012-08-21T14:57:14.463 回答
0

这看起来更适合在 switch 语句中,这将显着提高可维护性。

 var post = prompt("Name?", "Visitor") 
 switch(post)
 {
 case "Nick":
        alert("Hi Nick")  
        window.location = "index.html";  
        break;
 case "Visitor":
        alert("Welcome Visitor")  
        window.location = "index.html";
        break;  
 case "":
        alert("Please Enter Name") ;
        break;
 case null:
        alert("Closing");  
        break; 
 case "show me a secret":
        window.location = "secret.html";  
        break;
 case "Greg":  
        alert("Test");  
        break;
 case "greg":
        alert("Test 1")  
        break;    
 default:
        alert("Welcome " + post + ", Have Fun!")  
        window.location = "index.html";    
 }
于 2012-08-21T15:04:52.347 回答