有人可以向我解释一下吗?为什么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语句,对吗?)但是我发生的事情是,如果其他提示再次运行声明得到满足。那是为什么?
答案 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
}
});
您可能会使用其他活动,但我认为这两种情况在这种情况下最有利。