Php 将多个动态文本框放入javascript数组中

Php 将多个动态文本框放入javascript数组中,php,javascript,html,Php,Javascript,Html,以下代码仅将一个文本框存储到数组中。我希望有一个多维数组,动态存储多个动态文本框 代码当前要求用户输入4个输入,我使用%将其连接成一个字符串,并将其发布到php页面 我希望它获取所有4个输入,并将它们存储在一个数组中,该数组中每个动态添加的文本框存储如下: name[0][0] = dmenuvalue; name[0][1] = $name.val(); name[0][2] = $origprice.val(); name[0][3] = $specprice.val(); 然

以下代码仅将一个文本框存储到数组中。我希望有一个多维数组,动态存储多个动态文本框

代码当前要求用户输入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;
    }
   });
});
$(函数(){
变量$name=$(“#name”);
var$origprice=$(“origprice”);
var$specprice=$(“specprice”);
var$add=$(“#add”);
var$list=$(“#list”);
var-ctr=0;
$add.click(函数(){
ctr++;
var elem=document.createElement(“div”);
var hidden=document.createElement(“输入”);
var close=document.createElement(“a”);
var dmenu=document.getElementById(“天”);
var dmenuvalue=dmenu.options[dmenu.selectedIndex].text;
var regex=/^\d+(?:\。\d{0,2})$/;
如果(dmenuvalue!=“temp”&&$name.val().indexOf(“%”)==-1&&($origprice.val().indexOf(“%”)=-1&®ex.test($origprice.val())&($specprice.val().indexOf(“%”)=-1&®ex.test($specprice.val()))
{
var name=dmenuvalue++“%”“++$name.val()++“%”“++$origprice.val()++“%”“%%”++$specprice.val();
//变量名称[0][0]=dmenuvalue;
//var name[0][1]=$name.val();
//变量名称[0][2]=$origprice.val();
//变量名称[0][3]=$specprice.val();

//对于(i=0;i为了创建多维数组,只需在单击事件之外创建一个普通数组:

var dailyDeals = [];
然后(在单击事件内)创建另一个数组并将其推入父数组中:

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);
}
(i=0;i<4;i++)的
{
$('').attr({
'name':'name['+ctr+']['+i+']',
“价值”:每日交易[i]
}).附录(要素);
}
我的建议:
  • ctr++;
    行移动到进行验证的
    if
    中。如果希望控件从0开始而不是从1开始,请将其置于其他所有内容的下方

  • 不要在X按钮的单击处理程序中执行
    ctr--
    。因为如果用户删除最后一行以外的任何其他行,然后用户添加另一行,您将遇到问题。我会让数组有空洞,然后在服务器端处理它

  • 标记中删除
    name=“days”
    属性。否则将提交该属性

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

    要创建多维数组,只需在单击事件之外创建一个普通数组:

    var dailyDeals = [];
    
    然后(在单击事件内)创建另一个数组并将其推入父数组中:

    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);
    }
    
    (i=0;i<4;i++)的
    {
    $('').attr({
    'name':'name['+ctr+']['+i+']',
    “价值”:每日交易[i]
    }).附录(要素);
    }
    
    我的建议:
  • ctr++;
    行移动到进行验证的
    if
    中。如果希望控件从0开始而不是从1开始,请将其置于其他所有内容的下方

  • 不要在X按钮的单击处理程序中执行
    ctr--
    。因为如果用户删除最后一行以外的任何其他行,然后用户添加另一行,您将遇到问题。我会让数组有空洞,然后在服务器端处理它

  • 标记中删除
    name=“days”
    属性。否则将提交该属性

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

    您能检查一下您的问题吗?我刚刚编辑了一些代码,以便将您的代码与您的问题结合起来(顺便说一句,您自己可以阅读一下),我非常感谢您的审阅,以确保我没有在某个地方犯下可怕的错误。Thansk!看起来不错,David,谢谢。我试图通过将其复制到代码部分来放置它,但它不起作用……奇怪。@Denver:用
    %
    将值分隔为一个长字符串的目的是什么(例如,
    var name=dmenuvalue++“%”“++$name.val()++“%”“++$origprice.val()++“%”“++$specprice.val();
    )?您能检查一下您的问题吗?我刚刚编辑了一些代码,使您的代码与您的问题保持一致(顺便说一句,您自己也可以阅读一下),我非常感谢您的审阅,以确保我没有在某个地方犯下可怕的错误。Thansk!看起来不错,David,谢谢。我试图通过将其复制到代码部分来放置它,但它不起作用……奇怪。@Denver:用
    %
    将值分隔为一个长字符串的目的是什么(即,
    var name=dmenuvalue++“%”++$name.val()++“%”++$origprice.val()++“%”++$specprice.val();
    )?感谢您的提示。这项工作完美无瑕。我注意到您的JSFIDLE仍然使用名称,并附加了要显示的%。我如何将其拆分成一个表,以便打印出来,例如dmenuvalue$name.val(),等等。这就像是另一个问题。请在SO上创建另一个问题,如果你想让我看到它,请链接到这里。RegardsThanks在感谢提示时提出的问题。这工作完美无瑕。我注意到你的JSFIDLE仍然使用名称,并附加了%以显示。我如何将其拆分成一个表,以便打印出来例如dmenuvalue$name.val()等。这与其他问题类似。请在SO上创建另一个问题,如果希望我看到,请将其链接到此处。RegardsThanks问题在