【问题标题】:how to dynamically generate input fields based on user input in javascript如何根据javascript中的用户输入动态生成输入字段
【发布时间】:2012-10-30 18:37:07
【问题描述】:

我正在创建一个课程注册表单,要求用户输入任意数量的候选人,这些候选人将从他或她的公司学习该课程。

示例: 如果用户在名为“No of Candidates”的字段中输入 3,则脚本应为每个候选人的信息生成 3 行,其中包含“Name”、“Email”、“Phone”、“Sex”和“Position”等字段。

请在 html 下方找到“候选人编号”字段和为用户输入每个候选人信息而生成的字段。

请注意:要生成的字段基于用户的输入。即它可以是 3、5、10 e.t.c

<p>
<label><strong>No of Candidates</strong></label>
<label><input name="cand_no" type="text" placeholder="Type Your Number of Candidates" onchange='this.form.submit()' /></label>
  <div class="clear"></div>
</p>



    <div class="cand_fields">
    <table width="630" border="0">
      <tr>
        <td>Name</td>
        <td width="20">Sex</td>
        <td>Email</td>
        <td>Phone</td>
        <td width="40">Position</td>
      </tr>
      <tr>
        <td><input name="cand_name" type="text" placeholder="Name" required="required" /></td>
        <td>
        <select name="cand_sex" required="required">
        <option value=" "> </option>
        <option value="Male">Male</option>    
        <option value="Female">Female</option>
        </select>
        </td>
        <td><input name="cand_email" type="text" placeholder="Email" required="required" /></td>
        <td><input name="cand_phone" type="text" placeholder="Phone" required="required" /></td>
        <td><input name="cand_pos" type="text" placeholder="Position" required="required" /></td>
      </tr>
    </table></div>

我已经用 php 尝试过,但从服务器端这样做并不愉快。所以,我真的需要使用javascript从客户端完成它。

如果这可以用 javascript 实现,我将不胜感激......

谢谢一百万!

【问题讨论】:

  • 我会尝试创建一个空白 div 并根据用户输入的数字使用 for 循环附加一组表单字段。
  • 是的,它可以使用 JavaScript 完成,但很高兴看到您使用该代码已经走了多远。否则看起来你只是在指示某人为你构建它。欢迎来到 SO。

标签: javascript jquery html


【解决方案1】:

试试这个..使用.change()事件..

我创建了一个保存模板行的模板类 .. 然后使用.clone() 将行插入到表中..

$('[name="cand_no"]').on('change', function() {
    // Not checking for Invalid input
    if (this.value != '') {
        var val = parseInt(this.value, 10);

        for (var i = 0; i < val; i++) {
            // Clone the Template
            var $cloned = $('.template tbody').clone();
            // For each Candidate append the template row
            $('#studentTable tbody').append($cloned.html());
        }
    }
});​

Working Fiddle

编辑

1.) 我刚刚用 ID 命名了保存学生信息的表,以便于定位..

2.) 克隆只是创建相关元素的副本,即模板。因此,对于输入中输入的条目数,我们编写了一个 for 循环并将模板行附加到学生表中。

3.) 我只是将模板行存储到一个单独的带有 display: none 的 div 中,因此它在屏幕上不可见.. 这只是从中复制 HTML 并附加到新表。

<div class="template" style="display: none">
    <table>
    <tr >
         <td><input name="cand_name" type="text" placeholder="Name" required="required" /></td>
         <td>
            <select name="cand_sex" required="required">
               <option value=" "> </option>
               <option value="Male">Male</option>
               <option value="Female">Female</option>
            </select>
         </td>
         <td><input name="cand_email" type="text" placeholder="Email" required="required" /></td>
         <td><input name="cand_phone" type="text" placeholder="Phone" required="required" /></td>
         <td><input name="cand_pos" type="text" placeholder="Position" required="required" /></td>
      </tr>
  </table>
</div>

【讨论】:

  • 如果您能解释一下“for”循环区域,我将不胜感激。首先,ID #studentTable 是从哪里出现的?其次,变量$cloned,它是如何将候选字段生成到表单中的..?第三,模板行驻留在哪里..?请理解,我对javascript的了解很少......谢谢
  • 我只是将模板行存储到一个单独的 div 中 .. 见编辑
  • 言语无法解释我对您对我的问题的迅速回应是多么感激..非常感谢!...但是,我已经尝试了上面的 jscript 以及 html 代码模板,但在调用 onchange 函数后页面只是不断重新加载......以免我忘记,模板类的 div 和“cand_no”的输入字段都在一个表单中......这可能是问题吗?
  • 触发change事件时表单是否被提交
  • 是的,表单正在提交这个 --- onchange='this.form.submit()' --- 在“cand_no”字段中......这可能是问题吗?跨度>
【解决方案2】:

我可能建议您首先将 cand_no 更改为下拉菜单,否则您将必须验证输入是数字而不是文本。

然后我会添加 50 个版本的表格(确认,使用 div?),渐进式 ID 为 1-50。默认情况下对它们全部应用display:hidden,然后有一个从1cand_no 的javascript 循环将显示更改为阻止。

【讨论】:

  • 我认为你有一个下拉的想法会非常好,然后运行一个循环来生成候选字段。但我对 javascript 知之甚少。如果您能提供帮助将不胜感激...谢谢
  • 有 2 个假设可以完成这项工作。 1. 你创建一个带有 id cand_no 的选择菜单 2. 你用 div 包围必要的候选人注册字段,并让这些 div 具有 cand_no1、cand_no2 等的 id。然后你应该能够使用这样的东西:@987654325 @
猜你喜欢
  • 2021-11-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-10
  • 1970-01-01
相关资源
最近更新 更多