Javascript 动态字段名称-应如何操作?

Javascript 动态字段名称-应如何操作?,javascript,html,forms,jquery,Javascript,Html,Forms,Jquery,如下图所示,我想通过单击“添加更多产品”添加更多产品,然后将出现两个新元素(类别和项目下拉列表)。这将通过jQuery复制以前的并插入一个新的 创建元素时,动态字段的名称应该是什么?数据将被添加到$\u POST中,我可以插入到数据库中 HTML,请参见动态字段名称(例如:name=“items_2”,name=“items_2”): 我还添加了current\u added\u products字段的隐藏输入。这会告诉我当前添加了多少产品。不确定我是否需要这个 <ul>

如下图所示,我想通过单击“添加更多产品”添加更多产品,然后将出现两个新元素(类别和项目下拉列表)。这将通过jQuery复制以前的
  • 并插入一个新的

    创建元素时,动态字段的名称应该是什么?数据将被添加到$\u POST中,我可以插入到数据库中

    HTML,请参见动态字段名称(例如:
    name=“items_2”
    name=“items_2”
    ): 我还添加了
    current\u added\u products
    字段的隐藏输入。这会告诉我当前添加了多少产品。不确定我是否需要这个

    <ul>
        <li>
            <label>Category</label>
            <select name="category_1"> 
                <option>CPU</option>
                <option>HDD</option>
            </select>
            <select name="items_1"> 
                <option>Item 1</option>
                <option>Item 2</option>
                <option>Item 3</option>
            </select>
        </li>
        <li>
            <label>Category</label>
            <select name="category_2"> 
                <option>CPU</option>
                <option>HDD</option>
            </select>
            <select name="items_2"> 
                <option>Item 1</option>
                <option>Item 2</option>
                <option>Item 3</option>
            </select>
        </li>
        <li>
            <label></label>
            <input type="hidden" name="current_added_products" value="2" />
            <input type="button" class="add_more_product" value ="Add More Product" />
        </li>
    </ul>
    
    • 类别 中央处理器 硬盘驱动器 项目1 项目2 项目3
    • 类别 中央处理器 硬盘驱动器 项目1 项目2 项目3
    另外,在创建元素之前,如何获得要添加的下一个数字?

    您可以使用
    name=“item[1]”
    name=“item[2]”
    。这将在您的
    $\u帖子['item']

    中生成一个数组。请尝试以下操作:

    $('.add_more_product').click(function() {
        var $ul = $('ul:last');
        $ul.clone().find('select').attr('name', function(i, cur) {
            return cur.match(/\D+/g).join('') + (Number(cur.match(/\d+/g).join('')) + 1)
        }).end().insertAfter($ul)
    })​
    



    你可以给他们所有人一个
    名称
    类别[]
    项目[]
    ,然后当他们被发布时,你将得到一个数字索引数组,这样你就不必担心在每个新创建的元素上追加一个数字。例如,选择带有
    项目1的
    CPU
    和带有
    项目2的
    HDD
    将在发布后产生以下结果:-

    array
      'category' => 
        array
          0 => string 'CPU' (length=3)
          1 => string 'HDD' (length=3)
      'items' => 
        array
          0 => string 'Item 1' (length=6)
          1 => string 'Item 2' (length=6)
    
    这将使添加新表单元素变得更加容易:-

    html

    <ul>
        <li>
            <label>Category</label>
            <select name="category[]">
                <option>CPU</option>
                <option>HDD</option>
            </select>
            <select name="items[]">
                <option>Item 1</option>
                <option>Item 2</option>
                <option>Item 3</option>
            </select>
        </li>
    </ul>
    
    <input type="button" class="add_more_product" value ="Add More Product" />
    

    您可以使用以下代码替换从复制中获得的html

    htmlCopy.replace(/category_[0-9]+/, function(a){
           return "category_"+ (current_added_products+1);
    });
    htmlCopy.replace(/items_[0-9]+/, function(a){
           return "items_"+ (current_added_products+1);
    });
    

    如上述答案所述,使用aray
    name
    。要在数据库中添加更多内容,请使用以下代码:

    if (!$con){
       die('Could not connect: ' . mysql_error());
    }
    
    mysql_select_db($database, $con);
    
    $authors = $_POST['Author'];
    foreach($authors as $author) :
    $sql="INSERT INTO savetest (type, number) VALUES ('{$_POST['type']}','{$author}')";
    
    if (!mysql_query($sql,$con)){
       die('Error: ' . mysql_error());
    }
    endforeach;
    

    更多帖子可以帮助您。

    谢谢!所以我想元素命名是好的?你觉得使用数组怎么样?示例:
    name=“category[]”
    @我会回来的,不客气,这是一个很好的选择,而且更容易处理。
    htmlCopy.replace(/category_[0-9]+/, function(a){
           return "category_"+ (current_added_products+1);
    });
    htmlCopy.replace(/items_[0-9]+/, function(a){
           return "items_"+ (current_added_products+1);
    });
    
    if (!$con){
       die('Could not connect: ' . mysql_error());
    }
    
    mysql_select_db($database, $con);
    
    $authors = $_POST['Author'];
    foreach($authors as $author) :
    $sql="INSERT INTO savetest (type, number) VALUES ('{$_POST['type']}','{$author}')";
    
    if (!mysql_query($sql,$con)){
       die('Error: ' . mysql_error());
    }
    endforeach;