javascript - 使用 Javascript 创建表单

标签 javascript html forms dynamic

我正在考虑创建一个抽奖生成器,为此我仅使用 HTML 和 Javascript。目前,我让用户为“玩家”数量选择“选择”选项,然后选择一个 onclick() 事件来创建许多“名称”框。

其代码是:

<label for="playerNumbers">How many people are involved in the sweepstake?</label>
<select id="playerNumbers" name="playerNumbers">
<option value="2" onclick="makeform(2)"> 2 </option>
<option value="3" onclick="makeform(3)"> 3 </option>
<option value="4" onclick="makeform(4)"> 4 </option>
<option value="5" onclick="makeform(5)"> 5 </option>
<option value="6" onclick="makeform(6)"> 6 </option>
<option value="7" onclick="makeform(7)"> 7 </option>
<option value="8" onclick="makeform(8)"> 8 </option>
<option value="9" onclick="makeform(9)"> 9 </option>
<option value="10" onclick="makeform(10)"> 10 </option>
</select>

“makeform()”函数如下所示:

function makeform(numberOfPlayers) {
var x = '<form id="playerNames">';
for (i = 0; i < numberOfPlayers; i++) {
    x += '<label for="player'+(i+1)+'">Player '+(i+1)+'</label>';
    x += '<input type="text" id="player'+(i+1)+'" />';
    x += '<br />';
}
document.getElementById("newForm").innerHTML = x;
}

这很有效,但当用户填写新生成的表单时就会出现问题。我在“整体表单”(包括新表单)的底部添加了一个提交底部,但它似乎无法识别新生成的表单。

我想我问两个问题: 1.) 我怎样才能做到这一点?您可以使用 Javascript 无限地生成表单吗?或者有限制吗? 2.) 这是最好的方法吗?我确信不是,但真的不知道我应该关注什么技术。

谢谢!

(根据要求 - 所有代码:)

<form id="nameForm">
<div id="teamForm">
<label for="teamNumber">How many teams are involved?</label>
<select id="teamNumber" name="teamNumber">
<option value="2" onclick="makeform1(2)"> 2 </option>
<option value="3" onclick="makeform1(3)"> 3 </option>
<option value="4" onclick="makeform1(4)"> 4 </option>
<option value="5" onclick="makeform1(5)"> 5 </option>
<option value="6" onclick="makeform1(6)"> 6 </option>
<option value="7" onclick="makeform1(7)"> 7 </option>
<option value="8" onclick="makeform1(8)"> 8 </option>
<option value="9" onclick="makeform1(9)"> 9 </option>
<option value="10" onclick="makeform1(10)"> 10 </option>
<option value="11" onclick="makeform1(11)"> 11 </option>
<option value="12" onclick="makeform1(12)"> 12 </option>
<option value="13" onclick="makeform1(13)"> 13 </option>
<option value="14" onclick="makeform1(14)"> 14 </option>
<option value="15" onclick="makeform1(15)"> 15 </option>
<option value="16" onclick="makeform1(16)"> 16 </option>
<option value="17" onclick="makeform1(17)"> 17 </option>
<option value="18" onclick="makeform1(18)"> 18 </option>
<option value="19" onclick="makeform1(19)"> 19 </option>
<option value="20" onclick="makeform1(20)"> 20 </option>
<option value="21" onclick="makeform1(21)"> 21 </option>
<option value="22" onclick="makeform1(22)"> 22 </option>
<option value="23" onclick="makeform1(23)"> 23 </option>
<option value="24" onclick="makeform1(24)"> 24 </option>
<option value="25" onclick="makeform1(25)"> 25 </option>
<option value="26" onclick="makeform1(26)"> 26 </option>
<option value="27" onclick="makeform1(27)"> 27 </option>
<option value="28" onclick="makeform1(28)"> 28 </option>
</select>
<div id="newForm2"></div>
</div>
<label for="playerNumbers">How many people are involved in the sweepstake?</label>
<select id="playerNumbers" name="playerNumbers">
<option value="2" onclick="makeform(2)"> 2 </option>
<option value="3" onclick="makeform(3)"> 3 </option>
<option value="4" onclick="makeform(4)"> 4 </option>
<option value="5" onclick="makeform(5)"> 5 </option>
<option value="6" onclick="makeform(6)"> 6 </option>
<option value="7" onclick="makeform(7)"> 7 </option>
<option value="8" onclick="makeform(8)"> 8 </option>
<option value="9" onclick="makeform(9)"> 9 </option>
<option value="10" onclick="makeform(10)"> 10 </option>
</select>
<div id="newForm"></div>
<input type="submit" value="Submit Form" onclick="doSweepstake(this.form)" />
</form>

和:

function makeform1(numberofTeams) {
var y = '<form id="teamNames">';
for (j = 0; j < numberofTeams; j++) {
    y += '<label for="team'+(j+1)+'">Team '+(j+1)+'</label>';
    y += '<input type="text id="team'+(j+1)+'" />';
    y += '<br />';
}
document.getElementById("newForm2").innerHTML = y;
}

除了上面已经给出的功能之外。

最佳答案

原则上这不起作用,因为您不能嵌套表单。您需要将字段添加到父表单中。

您可以使用纯 JS 来完成此操作,但我建议您不要重新发明轮子,而是学习使用 JS 库 - 例如 jQuery。这将使您的生活变得更加轻松 - 它极大地简化了 DOM 操作(并且执行更多操作)。例如,您可以执行以下操作:

$("#playerNumbers option").click(function() {
    var p = $("#playerNames");
    for (var i = 0; i < $(this).attr("value"); i++)
        p.append('<label><input /></label><br />'); // etc
})

一开始可能看起来很困惑,但是再仔细看一下这段代码,你就会发现很多熟悉的东西——以及使用这样的东西的优雅,而不是使用 onclickinnerHTML

关于javascript - 使用 Javascript 创建表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11098172/

相关文章:

javascript - 如何使用 jquery 隐藏或显示带有两个选择选项的输入

javascript - 有没有一种简单的方法可以将秒数转换为 ISO 8601 格式以用于 schema.org 视频元数据?

forms - Polymer Paper-Radio-Group - 如何拥有多个同名的单选按钮

php - YII2 - 如何从表单中获取字段值以进行搜索

php - 如何使用准备好的语句将表单数据插入到 PDO 中?

javascript - JSON.parse 在 Node 和 Chrome 中有什么不同?

javascript - 谷歌地方搜索方法不一致

javascript - 从基本提供者继承时如何防止直接访问属性?

javascript - 如何将显示所有卡片按钮添加到下面的 javascript 代码中?

html - 在 Razor 邮件模板中使用 @Html.Raw 呈现 HTML 内容