gpt4 book ai didi

javascript - 动态创建 HTML 表单不起作用

转载 作者:太空宇宙 更新时间:2023-11-04 16:31:45 25 4
gpt4 key购买 nike

我正在尝试为 Chrome 扩展程序的选项页面创建多个表单,但是当我单击“添加”时,这些表单不会出现。

options.html

<!DOCTYPE html>
<html>
<head><title>My Test Extension Options</title></head>
<body>
<header>
<h1>My Tabs</h1>
</header>
<form id='fields'>
<button id="createNew">Add...</button>
</form>

<div id="status"></div>
<button id="save">Save</button>

</body>
<script src="./js/options.js"></script>
</html>

options.js

function render_form() {
let counter = 0;
let newdiv = document.createElement('div');
newdiv.innerHTML = "Entry " + (counter + 1) + " <br><input type='text' name='myInputs[]'>";
document.getElementById('fields').appendChild(newdiv);
counter++;
}

document.getElementById('createNew').addEventListener('click', render_form());

当我从最后一行取出调用时(即说 render_form 而不是 render_form()),输入字段根本不存在,但是当我调用时,初始字段将在那里,但单击添加...按钮后不会发生任何事情。

最佳答案

如果您的代码仅使用非 Chrome API 基本 HTML + JavaScript(您的代码就是),并且它无法在常规浏览器页面环境中工作,那么它也无法在 Chrome 扩展选项页面或弹出窗口中工作。

您的代码实际上无法运行,因为您试图分配 render_form() 的返回值。作为您的事件监听器:

addEventListener('click', render_form());

如果您更改它以实际分配 render_form作为事件监听器:

addEventListener('click', render_form);

它实际上会添加 <input>元素。它可能不完全是您想要的(即 counter 始终是 0 )。

您的问题意味着您希望默认情况下有一个输入字段。因此,我添加了对 render_form() 的调用将其添加为监听器后的功能。我也搬家了counter成为全局性的,以便您的计数能够按照我相信您的愿望进行。

var counter = 0;
function render_form() {
let newdiv = document.createElement('div');
newdiv.innerHTML="Entry "+(counter + 1)+" <br><input type='text' name='myInputs[]'/>";
document.getElementById('fields').appendChild(newdiv);
counter++;
}

document.getElementById('createNew').addEventListener('click', render_form);
render_form();
<!DOCTYPE html>
<html>
<head><title>My Test Extension Options</title></head>
<body>
<header>
<h1>My Tabs</h1>
</header>
<form id='fields'>
<button id="createNew" type='button'>Add...</button>
</form>

<div id="status"></div>
<button id="save" type='button'>Save</button>

</body>
<!-- Comment out the external script which is required in a Chrome popup,
but which does not work in a Stack Overflow snippet.
<script src="./js/options.js"></script>
-->
</html>

除了此代码片段之外,我还在 Google Chrome 中测试了上述代码作为扩展程序的选项页面。在这种情况下它工作得很好。

这是我用来测试它作为 Google Chrome 扩展和 Firefox WebExtension 的 manifest.json 文件 [注意:这个 manifest.json 使用相同的文件options.html 作为 options_ui页面和 browser_action popup ]:

{
"description": "Demonstrate changing the HTML of options.",
"manifest_version": 2,
"name": "change-option-form-demo",
"version": "0.1",

"applications": {
"gecko": {
//Firefox: must define id to use option_ui:
"id": "change-option-form-demo@example.example",
"strict_min_version": "48.0"
}
},

"browser_action": {
"default_icon": {
"48": "myIcon.png"
},
"default_title": "Show panel",
"browser_style": true,
"default_popup": "options.html"
},

"options_ui": {
"page": "options.html",
"chrome_style": true
}
}

关于javascript - 动态创建 HTML 表单不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39735873/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com