【问题标题】:Displaying Hidden Information using external JS使用外部 JS 显示隐藏信息
【发布时间】:2015-01-08 04:50:51
【问题描述】:

我正在做的是验证用户输入。目前,我只是验证名称以确保名称至少有 6 个字符长。我将添加更多验证,但我什至无法为此显示错误。如果脚本在 HTML 页面上,它确实有效,但我想要它在外部,因为我有很多需要添加。

当我在 HTML 页面上的标签之间有 js 时,它可以工作:如果输入的字符少于 6 个,它会显示由 CSS “txtNameError”隐藏的内容。

当我将 js 放在外部 .js 文件中时,它不起作用:如果少于 6 个字符,它不会将其更改为可见。

但是,代码是一样的吗?

这是“名称部分”的基本 HTML:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title>Registration Form</title>
    <link type="text/css" rel="stylesheet" href="week12.css" />
    <script type="text/javascript" src="validate.js"></script>
</head>
<body>

<div class="form">
  <table>
    <tr>
        <td><input type="text" name="txtName" id="txtName" placeholder="Name" /></td>
        <td><p class="error" id="txtNameError">Name must be at least 6 characters long.</p></td>
        <!--The p class "error" is set to hidden visibility using the CSS page. If they don't meet the requirements, then "txtNameError" becomes visible.-->
    </tr>
    <!--OTHER USER INPUT, THAT I'M NOT YET INCLUDING (just working on the name part now)-->
    <tr>
        <td><button onclick="validateForm();">Register</button></td>
    </tr>
  </table>
</div>

</body>
</html>

如果我的函数有下面的标签,它就可以工作:它使 txtNameError 可见。但是当我将我的函数放在 validate.js 上时,它根本不起作用。

<script>
    function validateForm() {
        var name = document.getElementById('txtName').value;
        var nameLength = name.length;
        if (nameLength < 6) {
            document.getElementById("txtNameError").style.visibility = "visible";
        }
    }
</script>

当我在 HTML 页面中有它时,我包含标签,当它在它自己的 validate.js 中时,我不包含脚本标签。

【问题讨论】:

  • 调试的时候,这个函数到底被调用了吗? JavaScript 控制台是否有错误?在调试器中单步执行代码,具体在哪里失败?元素找到了吗?是否设置了它们的属性?
  • fucntion validateForm() 只是一个错字,还是你的代码真的这么说?
  • 我正在使用记事本++。但我尝试在 javascriptlint.com 上检查代码并没有出现错误。
  • @OskarHane 这是一个错字!对不起。它是“功能”。当我在 HTML 页面上的脚本标记之间有代码时,它可以工作。当我将函数 validateForm() 复制到外部 .js 文件时,它不起作用。

标签: javascript html css validation visibility


【解决方案1】:

我想通了!

我从 HTML 页面中提取的其他变量之一是在页面完全加载之前尝试从页面中提取。我使用外部 .js 文件删除了它并且它可以工作。

我将致力于重新定位/重做该变量,所以希望我不会遇到这个问题!

非常感谢大家的帮助! :)

【讨论】:

    【解决方案2】:

    您在脚本中拼写错误的函数。

    同样在你的 html 中删除 ;在 onclick 属性中。似乎已经为我清理了错误。

     function validateForm() {
            var name = document.getElementById('txtName').value;
            var nameLength = name.length;
            if (nameLength < 6) {
                document.getElementById("txtNameError").style.visibility = "visible";
            }
        }
    

    和

    &lt;td&gt;&lt;button onclick="validateForm();"&gt;Register&lt;/button&gt;&lt;/td&gt;

    应该是&lt;td&gt;&lt;button onclick="validateForm()"&gt;Register&lt;/button&gt;&lt;/td&gt;

    此外,我使用 jQuery 重新编写了设置,以便更轻松地检查 html 元素,但是如果您需要它们在 javascript 中,我可以考虑重新编写它,在这里查看我更新的 jsfiddle:http://jsfiddle.net/dhershman/365r5tg5/1/

    【讨论】:

    • 我已经用函数改变了它,这是我输入一半代码时的拼写错误,因为我只是把我遇到问题的代码放在上面。在我的文件中并不是这样。我取出了分号,但仍然没有运气。
    • 这个脚本应该做什么,从你在这里显示的内容来看,执行的函数没有被脚本做其他任何事情。
    • 如果输入少于 6 个字符,脚本会使 txtNameError 可见。 txtNameError 使用 CSS 隐藏。当脚本在 HTML 页面上时,如果输入的字符少于 6 个,则会显示错误。当它在一个外部文件上时,如果显示少于 6 个字符,它什么也不做。
    • 所以我所做的是删除您当前的函数并基本上使用 jQuery 构建它,您可以在这里找到我的示例:jsfiddle.net/365r5tg5 如果您想坚持使用 Raw Javascript,我们也可以查看这些选项。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-09
    • 1970-01-01
    • 1970-01-01
    • 2020-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多