javascript - 在 javascript 中生成表单时出现问题 [HTML5]

标签 javascript jquery html dom

我正在尝试生成一个用于我的游戏的表单,我不得不说,JavaScript 与我所习惯的相比是一个全新的世界,并且无法仅在 Canvas 内创建文本字段非常蹩脚,(或者至少我还没有找到一种方法......适用于移动设备)

这是我的代码:

var loginForm;
var formUserInput;
var formSubmit;

loginForm = document.createElement("form");
loginForm.setAttribute('method', "post");
loginForm.setAttribute('action', 'doSomething()');

formUserInput = document.createElement("input");
formUserInput.setAttribute('type', "text");
formUserInput.setAttribute('name', "username");

formSubmit = document.createElement("input");
formSubmit.setAttribute('type', "submit");
formSubmit.value = "Submit";

loginForm.appendChild(formUserInput);
loginForm.appendChild(formSubmit);

document.getElementsByTagName('body')[0].appendChild(loginForm);

这是我的 HTML:

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title>Online RPG Alpha </title>
    <script src="https://code.jquery.com/jquery-2.1.1.min.js"></script>
    <script src="https://cdn.socket.io/socket.io-1.2.1.js"></script>
    <script src="js/engine/networking.js"></script>
    <script src="js/engine/phaser.min.js"></script>
    <script src="js/entity/Player.js"></script>
    <script src="js/CanvasManager.js"></script>
</head>
<body>
    <div id="game"></div>
</body>
</html>

调试页面时,我没有收到任何 JavaScript 错误,但表单从未出现,并且也不会附加到源代码中。我还尝试使用 $("body").append(loginForm); 这是 jQuery,但它也不起作用。

这是生成的 HTML:

<html><head lang="en">
    <meta charset="UTF-8">
    <title>Online RPG Alpha </title>
    <script src="https://code.jquery.com/jquery-2.1.1.min.js"></script>
    <script src="https://cdn.socket.io/socket.io-1.2.1.js"></script>
    <script src="js/engine/networking.js"></script>
    <script src="js/engine/phaser.min.js"></script>
    <script src="js/entity/Player.js"></script>
    <script src="js/CanvasManager.js"></script>
</head>
<body>
    <div id="game" style="overflow: hidden;"><canvas width="800" height="600" style="display: block; touch-action: none; -webkit-user-select: none; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); cursor: inherit;"></canvas></div>

</body></html>

JavaScript 位于“js/CanvasManager.js”脚本内部。

最佳答案

由于您的 JavaScript 代码位于通过 script 引用的外部文件中head 中的元素部分,当浏览器仍在处理 head 时,代码就会被执行。部分,甚至还没有开始阅读 body元素。因此,不存在body DOM 中的元素,因此追加失败。在浏览器控制台日志中,您应该看到如下错误消息:

TypeError: document.getElementsByTagName(...)[0] is undefined

有多种方法可以解决此问题。一种方法是移动元素

<script src="js/CanvasManager.js"></script>

位于正文末尾,结束标记之前 </body> .

更简洁的方法是将代码包装在函数中,并指定它在页面加载后执行:

window.onload = function() {
  // your current code goes here
};

这样逻辑就不会依赖于 script 的位置元素。

关于javascript - 在 javascript 中生成表单时出现问题 [HTML5],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27420157/

相关文章:

html - 试图让一个 div 标签扩展到浏览器的底部

javascript - 将作为一个出现但用逗号分隔的数组中的值分开

javascript - 发现在验证方法中按下了哪个提交按钮

javascript - 在 HTML 可排序表中动态隐藏/显示行数据

javascript - 具有辅助功能和打印机支持的延迟加载图像

html - 分辨率高于 1024x768 时页面底部的空白区域

javascript - React-router:使用 hashHistory.push 刷新子页面内容

javascript - 从 Node 中的多个嵌套回调中返回值

jquery - 将类添加到单击的元素

javascript - 带有多个对象的php请求json jquery