2

以下代码仅将一个文本框存储到数组中。我想要一个多维数组来动态存储多个动态文本框。

该代码当前要求用户输入 4 个输入,我使用 % 将其连接成一个字符串并将其发布到 php 页面。

我希望它获取所有 4 个输入并将它们存储在一个数组中,每个动态添加的文本框存储如下:

name[0][0] = dmenuvalue;  
name[0][1] = $name.val();  
name[0][2] = $origprice.val();  
name[0][3] = $specprice.val();

然后当用户添加另一个时

name[1]0] = dmenuvalue, etc,etc

工作代码:

$(function(){
   var $name = $("#name");
   var $origprice = $("#origprice");
   var $specprice = $("#specprice");
   var $add = $("#add");
   var $list = $("#list");
   var ctr = 0;
   $add.click(function() {
    ctr++;
    var elem = document.createElement("div");
    var hidden = document.createElement("input");
    var close = document.createElement("a");
    var dmenu = document.getElementById("days");
    var dmenuvalue = dmenu.options[dmenu.selectedIndex].text;
    var regex  = /^\d+(?:\.\d{0,2})$/;
    if(dmenuvalue != "temp" && $name.val().indexOf("%") == -1 &&  ($origprice.val().indexOf("%") == -1 && regex.test($origprice.val())) && ($specprice.val().indexOf("%") == -1 && regex.test($specprice.val())))
    {
        var name = dmenuvalue +"%"+ $name.val() + "%" + $origprice.val()  + "%" + $specprice.val();
        //var name[0][0] = dmenuvalue;
        //var name[0][1] = $name.val();
        //var name[0][2] = $origprice.val();
        //var name[0][3] = $specprice.val();
        //for(i=0;i<5;i++){
               $(hidden).attr({
               'type': 'hidden',
               'name': 'name[]',
               'value': name
               });
          // }
           $(close).attr({
           'href': '#'
           }).html("X").click(function() {
           $(elem).remove();
           ctr--;
           return false;
           });
           $(elem).html(name).append(hidden)
           .append(close);
           $list.append(elem);
        document.getElementById("dailydeals").innerHTML = '';
           return false;
    } else {
        document.getElementById("dailydeals").innerHTML = '*Please complete all required fields above.';
        return false;
    }
   });
});

有人可以帮我将代码修改为多维吗?

4

1 回答 1

1

为了制作一个多维数组,只需在点击事件之外创建一个普通数组:

var dailyDeals = [];

然后(在点击事件中)创建另一个数组并将push其放入父数组中:

var dailyDeal = [
    dmenuvalue,
    $name.val(),
    $origprice.val(),
    $specprice.val()
];
dailyDeals.push(dailyDeal);

但我不认为你真的需要这个嵌套数组(至少从我从你的代码中理解),因为你只需要内部数组来创建隐藏的输入:

for (i = 0; i < 4; i++) {
    $('<input type="hidden">').attr({
        'name': 'name[' + ctr + '][' + i + ']',
        'value': dailyDeal[i]
    }).appendTo(elem);
}

我的建议:

  1. ctr++;行移到内部if进行验证。如果您希望控件从 0 而不是 1 开始,请将其放在其他所有内容的下方。

  2. 不要ctr--在 X 按钮的单击处理程序中执行此操作。因为如果用户删除除最后一行之外的任何其他行,然后用户添加另一行,您就会遇到问题。我会让阵列留有空洞,然后在服务器端处理它。

  3. 从标签中删除name="days"属性。<select>否则将被提交。

JSFiddle 查看完整源代码并测试提交的值:

http://jsfiddle.net/protron/xGhnv/4/

于 2012-10-11T05:37:02.283 回答