【问题标题】:Javascript Dynamic Form FieldJavascript 动态表单字段
【发布时间】:2014-12-09 20:34:24
【问题描述】:

我在使用 javascript 时遇到了困难,我需要一些帮助。我有一个表单可以向 php 发送要填写的确切输入量,现在我想使用 jQuery/javascript 创建预览,但是如何动态捕获所有字段。

这是我的表格的一部分供参考:

<td>
    <div class="input-group">
        <span class="input-group-addon">
            <i class="fa fa-pencil"></i></span>
        <input class="form-control" id="task" type="text" name="task" placeholder="Task Title">
    </div>
</td>
<td>
    <div class="input-group">
        <span class="input-group-addon">
            <i class="fa fa-pencil"></i>
        </span>
        <input class="form-control"  id="description" type="text" name="description" placeholder="Task Description">
    </div>
</td>

所以,我在 PHP 中添加了名称字段 + 数字,这样我可以获得不同的名称,即:task1task2、...等。

现在我需要做的是使用 jQuery/javascript 获取值。

到目前为止,我的想法是在 for()(循环)中声明 var(变量)

var task = $('input[name=task]').val();

如何获取所有值 task1task2。没有人知道用户将提交多少个任务字段,所以我需要获取字段数

任何帮助方向,以便我解决这个问题

【问题讨论】:

  • 给他们所有相同的类,例如class="form-control task"。然后你可以使用$("input.task") 来获取它们。
  • 请查看link我如何获取所有值?

标签: javascript php jquery html


【解决方案1】:

使用Attribute Starts With Selector [name^="value"]jQuery.each()

var tasks = $('input[name^=task]').val();
$.each(tasks,function(index, value){
   //do something with the value
   alert($(this).val());
});

编辑

var tasks = $('input[name^=task]');
$.each(tasks,function(index, value){
   //do something with the value
   $('#Preview').append($(this).val());
});

【讨论】:

  • 您的解决方案非常棒,几行代码。但是如何打印 task1、task2、task3 的值?$('#Preview').text($(this).val()); 它没有显示任何内容
  • 我已经更新了我的答案。 (1) 从var tasks =... 中删除.val()。 (2) 不要使用.text(),它会覆盖并只显示最后一个结果,而是使用.append()。您更新的 jsFiddle - jsfiddle.net/5nd7308L/10
  • 这太棒了,我真的非常感谢你。为了让我了解更多, append() 列出了结果对吗?
  • .append() 插入/添加到所选元素的末尾。 $.each() 是允许它列出所有内容的原因。如果您使用.text().html(),您只会覆盖每个循环上的选定元素,因此只会显示最后一个值。
【解决方案2】:

首先,您无需在服务器端(即 PHP)上为输入字段命名,例如 task1, task2, etc 以区分它们。你只需要给它们一个 name 属性值,比如tasks[] 并注意括号 [] 所以你可能会得到如下内容:

<input class="form-control" id="tasks[]" type="text" name="tasks[]" placeholder="Task Title">
...
<input class="form-control" id="tasks[]" type="text" name="tasks[]" placeholder="Task Title">

就像这些字段中的自动值将作为数组发布到 PHP 中,并且将在 PHP 脚本中接收如下:

$tasks = $_POST['tasks'];
foreach ($tasks as $task){
   echo $task;
} 

第二通过这种方式,您将能够轻松地使用 Javascript 收集您的输入数据,以便使用 getElementsByName 方法生成预览,如下所示:

function preview(){
      output = "";
      tasks = document.getElementsByName('tasks[]');
      for (i=0; i < tasks.length; i++){
        output += "<b>Title</b>: "+tasks[i].value+"<hr />";
      }
      panel = document.getElementById('panel');
      panel.innerHTML = output;
    }

当然,您可以将此解决方案扩展到表单中任意数量的字段,例如descriptions[]

一个javascript演示:http://jsbin.com/kiyisi/1/

【讨论】:

    【解决方案3】:

    问:now I want to create a preview using jquery/javascript but how can I catch all the fields dinamically

    如果你给他们上课,你可以得到each的所有字段:

    $(".className").each(function() {
        do something
    

    下一步,“捕获”所有字段...我假设您可能也想要这些字段的值?详情请查看this example,这是一个加载 key:value 对的 sn-p (form field name : value场)成地图:

    var map = {};
    $(".activeInput").each(function() {
        map[$(this).attr("name")] = $(this).val();
    });
    

    打印 div 内的所有值(在这里,我假设您正在谈论 div 的子值):

    <div>
        <span>Hi</span>
        <span>Hello</span>
        <span>Hi again</span>
    </div>
    
    $("div").children().each(function () {
       console.log($(this).text());   
    });
    

    $("div span").each(function () {
       console.log($(this).text());   
    });
    

    【讨论】:

    • 我也试过你的,但同样的问题,我怎样才能打印一个 div 中的所有值? $('#Preview').text(map.task);缺少task前面的数字
    • 检查此链接http://jsfiddle.net/tty1nf0/5nd7308L/7/ 我很困惑,我知道解决方案很简单,但不知道如何使它工作。子 div 可能不是解决方案,因为我想预览具有唯一 ID 的 div 中的值
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-04
    • 2023-03-16
    • 2011-02-07
    • 2017-09-29
    • 1970-01-01
    相关资源
    最近更新 更多