为什么guestName提示会再次运行?

时间:2017-03-17 02:36:26

标签: javascript

有人可以向我解释一下吗?为什么prompt()再次运行? 请给我一些建议,在哪里以及我应该改变什么以获得更好的代码。谢谢。

function welcomeGuest() {
  do {
    guestName = prompt("Welcome to my Anime Website! May I know your name?");
    if (guestName === null || guestName === false) {
      alert("Please come back again.");
      window.close();
    }
    if (guestName === "") {
      alert("Please enter your name!");
    } else if (guestName.length < 4) {
      alert("Your name should be atleast 4 characters!");
    } else if (!(isNaN(guestName))) {
      alert("Your name can't be number!");
    } else {
      guestNamesmall = guestName.slice(1, guestName.length);
      alert("Welcome to my Anime Website, " + guestName.charAt(0).toUpperCase() + guestNamesmall + "!");
      //bodyContent();
    }
  } while (guestName.length < 4 || !(isNaN(guestName)));

}

// EDIT: adding call to function for demo purposes
welcomeGuest();

编辑:我很抱歉,但我的问题是当我输入正确的输入时(它应该转到else语句,对吗?)但是我发生的事情是,如果其他提示再次运行声明得到满足。那是为什么?

2 个答案:

答案 0 :(得分:0)

如果你只调用welcomeGuest函数一次并且你的while循环中的条件得到尊重guestName.length < 4 || !(isNaN(guestName))它将不再运行。

答案 1 :(得分:0)

原因提示再次出现是因为您将其置于循环中,直到满足您的条件。因此,如果永远不会遇到 // Set basic authentication HttpAuthenticationFeature feature = basicAuth(basicUser, basicPassword); SSLContext sslContext= getSSLContext(); WebTarget webTarget = newRestClient(feature, sslContext, url); Invocation.Builder invocationBuilder = webTarget.request(MediaType.APPLICATION_JSON_TYPE); invocationBuilder = invocationBuilder.header(key, requestHeaders.get(key)); final Response response = invocationBuilder.get(); ,那么它将继续显示。

我会避免使用这样的循环。您可以使用css来阻止用户浏览您的网站,而不是通过循环不断提示他们。然后使用事件来处理您的逻辑。你有提交/输入按钮吗?然后在click event上添加您的逻辑。如果没有,那么您可以在key down event上执行此操作并查找回车键。

例如:

guestName.length < 4 || !(isNaN(guestName))

选项1

var textbox = document.getElementById("idOfTextbox")

或选项2

textbox.addEventListener("keydown", function(event) {
//stop the click event from propagating
event.preventDefault();
//check if enter key was clicked (#13)
    if (event.keyCode == 13) {
        //do your logic to verify pass/fail of user input
    }
});

您可能会使用其他活动,但我认为这两种情况在这种情况下最有利。