看起来似乎在函数中使用var两次

时间:2016-01-14 02:31:32

标签: javascript html

好的继承人我的问题..我正在尝试按下功能我已经定义了一个变量但是...我希望能够在提示使用窗口中单击按钮到网站中的提示类型.location转到哪个站点...但是当用户单击ESC或在提示中取消时它等于(null或false)。但是,当我单击取消按钮时,它会变为null,就好像它是一个href ..

function goToSite() {
  var done = prompt("Please Enter a Website You'd like to go to - Or click \"Cancel\" to go back to the main page.");
  window.location = done;
}
if (done === null) {
  window.location = "java_doc.htm";
}
<button onclick="goToSite()"></button>

2 个答案:

答案 0 :(得分:3)

在更改window.location之前,必须先运行条件语句,否则地址栏将指向null。此外,您的函数的右括号位于错误的位置,并且您在实际执行其操作之前关闭了函数。

function goToSite(){

    var done = prompt("Please Enter a Website You'd like to go to - Or click \"Cancel\" to go back to the main page.");

    if(done === null){
         window.location = "java_doc.htm";
    } else {
         window.location = done;
    }

}

答案 1 :(得分:1)

您可以执行以下操作:

function goToSite() {
  var done = prompt("Please Enter a Website You'd like to go to - Or click \"Cancel\" to go back to the main page.");

  window.location = (done === null) ? "java_doc.htm" : done;
}

为了更进一步,您可以验证用户是否确实输入了有效的网址。

function validUrl(textval) {
    var urlregex = /^(https?|ftp):\/\/([a-zA-Z0-9.-]+(:[a-zA-Z0-9.&%$-]+)*@)*((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])){3}|([a-zA-Z0-9-]+\.)*[a-zA-Z0-9-]+\.(com|edu|gov|int|mil|net|org|biz|arpa|info|name|pro|aero|coop|museum|[a-zA-Z]{2}))(:[0-9]+)*(\/($|[a-zA-Z0-9.,?'\\+&%$#=~_-]+))*$/;
    return urlregex.test(textval);
}

function goToSite() {
  var done = prompt("Please Enter a Website You'd like to go to - Or click \"Cancel\" to go back to the main page.");

  window.location = (done === null || !validUrl(done)) ? "java_doc.htm" : done;
}

这确保只有当用户输入有效的网址时,才会将其转到该网址。否则,它们将被重定向到您的默认页面。