修改javascript以输出表单名称而不是表单ID

时间:2012-10-08 00:15:13

标签: php javascript forms dynamic

我使用以下代码制作了几个输入字段框:

<script type='text/javascript'>//<![CDATA[ 
    $(window).load(function(){
        $('.add').click(function(){
            par_id=$(this).parent().attr('id');
            count=$("#"+par_id+"> input").length;
            id=par_id.toString();
            $(this).parent().append("<br/><input type='text' id='"+id+"'>");
        });
    });//]]>  
</script>

我正在使用上述代码来创建可以动态添加新字段的输入字段。

此代码创建多个相同的表单ID,但我希望它创建多个相同的表单名称,以便我可以使用foreach命令完全输出它。

现在我想使用此

将输入数据输出到PHP中
<?php
    foreach($_POST['formid'] as $value) {
        echo "$value <br />";
    }
?>

我想问的是foreach命令只会输出表单名称中的数据,但我正在使用的javascript代码会通过表单id ,而不是表格名称。

所以我需要一个代码,用表单名称创建更多输入框,而不是表单ID!

我不知道如何修改原始代码,因为我是从其他网站获得的。

请帮忙!

3 个答案:

答案 0 :(得分:1)

@Chung - 我试图理解你的问题,并提出了下面的建议,但你必须明白你的问题很模糊,令人困惑,可能会产生误导。

对您的代码进行微小更改:

$(document).ready(function() {
    $('.add').click(function() {
        par_id = $(this).parent().attr('id');
        par_name = $(this).parent().attr('name');
        count = $("#" + par_id + "> input").length;
        id = par_id.toString();
        $(this).parent().append("<br/><input type='text' name='" + par_name + "' id='" + id + "'>");
    });
});​

正如此处所示:
http://jsfiddle.net/pratik136/2nV3m/

有些疑惑/建议:

  • 当您不使用时,为什么会有countpar_id始终是一个字符串,但是您将其投放到string,这表示您可能在某处预期count
  • 在我建议的状态下,form包含多个具有相同input的{​​{1}},因此,您将无法使用name进行迭代,相反,您将收到所有这些元素的foreach作为value列表。
  • 您是否可能希望使用comma-delimited以不同方式命名每个元素,然后使用count而不是for在服务器端进行循环?如此处演示:http://jsfiddle.net/pratik136/7pK29/

答案 1 :(得分:1)

您只需要在javascript函数插入的代码中添加name属性。

原件:

$(this).parent().append("<br/><input type='text' id='"+id+"'>");

Ammended:

$(this).parent().append("<br/><input type='text' name='yourinputname' id='"+id+"'>");

编辑:正好和事后的想法......

如果ID没有用处且只需要name属性,则大部分代码都是不必要的,可以简化为以下内容。

<script type='text/javascript'>//<![CDATA[ 
    $(window).load(function(){
        $('.add').click(function(){
            $(this).parent().append("<br/><input type='text' name='yourinputname');
        });
    });//]]>  
</script>

答案 2 :(得分:1)

只是评论:

> par_id = $(this).parent().attr('id');

变量par_id应保留在本地,因此声明它。表达式更简单,更有效,而且输入更少:

var par_id = this.parentNode.id;

关于:

> count=$("#"+par_id+"> input").length;

正如在其他答案中所指出的那样,不使用count变量(并且应该声明它使其保持在本地)。由于您想多次使用ID为par_id的元素,请考虑:

var par_el = this.parentNode;
var par_id = par_el.id;
var count = $(par_el).find('input').length;

在可用的情况下使用属性访问比调用函数执行相同操作更简单,更高效。