使用 dom Javascript 添加新创建的标签和输入文本以形成表单?

Posted

技术标签:

【中文标题】使用 dom Javascript 添加新创建的标签和输入文本以形成表单?【英文标题】:Add new created label and input-text to form using dom Javascript? 【发布时间】:2019-07-16 14:42:31 【问题描述】:

我有三个字段将由用户填写。 一个用于问题,另外两个用于建议的答案。我想让用户在点击添加提议时添加第三个或尽可能多的提议。我开始编写函数,但仍然错过了

<head>
    <script>
      function myFunction()
        var x = document.createElement("LABEL");
        var t = document.createTextNode("Titre");
        x.appendChild(t);
      
    </script>
</head>

<body>
    <form id="myForm" method="POST" action="./exam_coordinates">
        <label for="question"> Question </label> <br>
        <input class="champ" type="textarea" name="question" id="question" value=""><br><br>
        <label for="ans"> Answers </label> <br>
        <input type="checkbox" name="ans1" id="ans1" values="" />
        <input type="text" name="ans1" id="ans1" value=""><br>
        <input type="checkbox" name="ans2" id="ans2" />
        <input type="text" name="ans2" id="ans2" value=""><br>
        <br>
        <button onclick="myFunction()">Add proposition</button> <br><br><br>
        <input type="submit" value="submit">
    </form>
</body>

【问题讨论】:

This 可能会有所帮助 Similar,使用 jQuery 【参考方案1】:

如果我的问题正确,您需要添加输入以从用户那里获得更多想要的答案。如果是这样,请参阅以下内容 -

var addButton = $('#add_button');
var wrapper = $('#more_answers');
$(addButton).click(function(e) 
    e.preventDefault();
    var lastID = $("#myForm input[type=text]:last").attr("id");
    var nextId = parseInt(lastID.replace( /^\D+/g, '')) + 1;
    $(wrapper).append(`<div><input type="checkbox" name="ans$nextId" id="ans$nextId" values="" />&nbsp;<input type="text" name="ans$nextId" id="ans$nextId" value=""/><a href="#" class="delete">Delete</a><div>`);
);

$(wrapper).on("click", ".delete", function(e) 
    e.preventDefault();
    $(this).parent('div').remove();
)
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<body>
    <form id="myForm" method="POST" action="./exam_coordinates">
        <label for="question"> Question </label> <br>
        <input class="champ" type="textarea" name="question" id="question" value=""><br><br>
        <label for="ans"> Answers </label> <br>
        <input type="checkbox" name="ans1" id="ans1" values="" />
        <input type="text" name="ans1" id="ans1" value=""><br>
        <input type="checkbox" name="ans2" id="ans2" />
        <input type="text" name="ans2" id="ans2" value=""><br>
        <div id="more_answers"></div>
        <br>
        <button id="add_button">Add proposition</button> <br><br><br>
        <input type="submit" value="submit">
    </form>
</body>

【讨论】:

太棒了@Tushar,就是这样!我运行了 sn-p,它显示了预期的结果。但是我要把你写的第一个代码块放在我自己的页面中,以便在用户单击按钮时被调用。 (考虑到我是 javascript 新手) 您可以将其添加到相关 html 中可访问的 js 文件中,也可以添加到 HTML 中的 &lt;script type="text/javascript"&gt;&lt;/script&gt; 标记中【参考方案2】:

在您的函数中,您还必须在其父级中附加您的标签。如下 -

function myFunction() 
    var form = document.getElementById("myForm");
    var input = document.createElement("input");
      

    form.appendChild(input)
<form id="myForm" method="POST" action="./exam_coordinates">
    <label for="question"> Question </label> <br>
    <input class="champ" type="textarea" name="question" id="question" value=""><br><br>

    <label for="ans"> Answers </label> <br>

    <input type="checkbox" name="ans1" id="ans1" values="" />
    <input type="text" name="ans1" id="ans1" value=""><br>

    <input type="checkbox" name="ans2" id="ans2" />
    <input type="text" name="ans2" id="ans2" value=""><br>
    <br>

    <button type="button" onclick="myFunction()">Add proposition</button> <br><br>

    <input type="submit" value="submit">
</form>

如果你想把你的元素放在任何特定的地方,你应该在你的表单元素中创建一个包装器,就像下面一样 -

function myFunction() 
  let wrapper = document.getElementById("dynamic-fields");
  var input = document.createElement("input");
  wrapper.appendChild(input)
<form>
    <!-- ...input fields... -->
    <div id="dynamic-fields"></div> <br>
    <!-- ...buttons.... -->
    <button type="button" onclick="myFunction()">Add proposition</button>
</form>

这样,它会将这些动态生成的元素放在表单页面的特定位置。

试试这个 - https://jsitor.com/IO08f-WBx

【讨论】:

嗯,添加了标签。输入 type="text" 呢?我也问过它,它会有另一种附加方式 为您更新了 sn-p。检查第一个示例。 不错,还有包装?

以上是关于使用 dom Javascript 添加新创建的标签和输入文本以形成表单?的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript DOM 向文档添加新的元素

DOM创建移除替换元素

js操作DOM对象

JavaScript-Runoob-JS HTML DOM :DOM 元素

JavaScript 学习-34.HTML DOM 创建/插入/删除/替换元素

JavaScript HTML DOM 元素 (节点)