【问题标题】:Why isn't my html/javascript code working?为什么我的 html/javascript 代码不起作用?
【发布时间】:2015-09-28 15:14:33
【问题描述】:

我正在努力做到这一点,所以当我访问该网站时,有一个按钮,当你按下它时,它会提示你“密码是多少?”为了确定它是否正确,我使用 concat 字符串来获取提示答案并将 .html 添加到末尾,我希望它重定向到 (passwordtheyenter).html,所以如果他们输入“test”作为密码,它'将他们带到“test.html”

这是我的代码:

<!DOCTYPE html>
<html>
<head>
    <script>
        function testFunction() {
        var str1 = prompt.("What's the password?");
        var str2 = ".html";
        var pass = str1.concat(str2);
        }
    </script>
</head>
<body>
<button onclick="testFunction()">Chat</button>


<script>
    open.window(pass)
</script>
</body>
</html>

谢谢。

【问题讨论】:

  • 什么是prompt.()?您应该打开控制台(在大多数浏览器中为 F12)。它会让你知道你的代码是否有错误。
  • 如果有人尝试了几个密码并找到了您不希望他们看到的页面,会发生什么?
  • 您永远不应该使用客户端验证作为您的主要身份验证方式。
  • 我真的不知道如何在这个网站上回复,我注册问这个。 @HoboSapiens 我只会有这个页面和重定向页面
  • 我真的不知道如何在这个网站上回复,我注册问这个。@MatthewRath 这不是很重要的事情,我不需要保存数据来记录稍后,但如果您仍有任何建议,我很乐意听到。

标签: javascript html concat


【解决方案1】:

您的 HTML/Javscript 代码无法正常工作的主要原因有四个。

首先,变量pass 的范围仅在函数内定义,因此只能在该函数内访问。在函数外部定义它,然后在内部设置它的值。

编辑:因为pass 现在只被函数使用,所以不需要在函数之外定义。

接下来,我相信您正在尝试使用 window.open() 函数。您在代码中编写了 open.window()。

第三,你不小心在 prompt() 调用后有一段时间

第四,您应该在函数中调用 window.open() ,以便在用户实际单击按钮之前它不会运行。

<!DOCTYPE html>
<html>
<head>
    <script>
        function testFunction() {
            var str1 = prompt("What's the password?");
            var str2 = ".html";
            var pass = str1 + str2;
            window.open(pass);
        }
    </script>
</head>
<body>
<button onclick="testFunction()">Chat</button>
</body>
</html>

【讨论】:

  • @Drew 如果你在testFunction 中有window.open 调用,那么你不需要将pass 变量设为全局
【解决方案2】:

你的代码的问题如下:

  1. prompt.() 是语法无效的 Javascript 代码。它会给您一个错误,可以在控制台中看到(您可以在大多数浏览器中按 F12 或在 Opera 中按 CTRL+SHIFT+I 打开它)。

  2. open.window() 是语义上无效的 Javascript 代码。没有全局变量open。你可能想要的是window.open(...)

  3. 您的代码编写方式没有多大意义。单击按钮时,会调用该函数,但它不执行任何操作。底部的 Javascript 会给你一个错误,但即使它是有效的 Javascript,它仍然会给你一个错误,因为变量 pass 没有在全局范围内定义;它是在函数内部定义的。一旦函数运行,变量就会被遗忘。

最好在按钮上添加一个点击处理程序:

<!doctype html>

<!-- The button -->
<button id="my-button">Chat</button>

<script>
    // Get the button
    var myButton = document.getElementById("my-button");

    // Set a click handler on the button
    myButton.onclick = function () {

        // Get the page
        var page = prompt("What's the password?");

        // Set a new location for the window; this sends the
        // current page to the new page
        window.location = page + ".html";
    };
</script>

【讨论】:

    【解决方案3】:

    尝试将第一个脚本标记替换为下面的标记。 建议使用标签的'type'属性来定义脚本的类型。

    <script type="text/javascript">
        function testFunction() {
        var str1 = prompt("What's the password?");
        window.open(str1+".html");
        }
    </script>
    

    【讨论】:

    【解决方案4】:

    您可能正在寻找:

    function testFunction() {
        // Prompt user for input
        var str1 = window.prompt("What's the password?");
        // Append .html to user input
        var str2 = ".html";
        // Open new window with concatenated result
        window.open( str1.concat(str2) );
    }
    

    然后您可以删除:

    <script>
        open.window(pass)
    </script>
    

    它正在运行:https://jsbin.com/gewudaruda/edit?html,output

    【讨论】:

      【解决方案5】:

      pass 变量仅在testFunction 内部定义,因此当您尝试调用open.window 时无法访问它。

      尝试在testFunction 中返回pass 并将结果传递给open.window

      【讨论】:

      • 对不起,我对这类东西真的很陌生。你能详细说明如何做到这一点吗?我真的很感激这个答案。
      • 您的 open.window 函数会在页面加载时执行,但您只会在用户单击按钮时提示他们。将 open.window 移动到您的 testFunction 中并删除按钮后的脚本标记。
      • (如果你是这样回复的),这是我的新代码,但它仍然不起作用:pastebin.com/ZFUfre0W
      猜你喜欢
      • 2021-12-10
      • 2021-09-30
      • 1970-01-01
      • 1970-01-01
      • 2018-12-01
      • 1970-01-01
      • 2016-03-02
      • 1970-01-01
      • 2014-01-23
      相关资源
      最近更新 更多