Javascript 追加元素don';我不会在提交时出现

Javascript 追加元素don';我不会在提交时出现,javascript,Javascript,我用javascript创建了一个对象,它附加了一个包含5个元素的表。但是,当我提交表单时,添加的字段不会显示 var whenCellOne = firstRow.insertCell(1); this.often = document.createElement("select"); this.often.name = "['"+me.id+"']['often']"; this.often.appendChild(this.createOption("Vecka", "0")); this

我用javascript创建了一个对象,它附加了一个包含5个元素的表。但是,当我提交表单时,添加的字段不会显示

var whenCellOne = firstRow.insertCell(1);
this.often = document.createElement("select");
this.often.name = "['"+me.id+"']['often']";
this.often.appendChild(this.createOption("Vecka", "0"));
this.often.appendChild(this.createOption("Månad", "1"));
this.often.onchange = function(){ me.update(); };
whenCellOne.appendChild(this.often);
这就是我创建其中一个元素的方式,我希望它会出现为
$\u POST['1a']['frequency']=“0”
,但是变量转储看起来就像
数组(1){[“submit”]=>字符串(2)“ok”}
怎么了?我该如何修复它


这是完整的javascript代码,这是测试页面

PHP不会使用表单名为
[something]
的字段中的数据填充
$\u POST
。您需要更改名称

如果希望
$\u POST['1a']['frequency']
有一个值,则需要
name=“1a[frequency]”

假设
me.id
的值为
1a
,您当前将其设置为
name=“['1a']['frequency']”

应该是

this.often.name = me.id + "[often]";

您的脚本中也有一些错误,您仍然需要实现Quentin提到的bug修复:

<html>
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
            <script type="text/javascript" src="./system/advancedDate.js"></script>
        </head> 
        <body>
            <form action="#" method="POST">
                <div id='1a'></div>
                <input type="submit" name="submit" value="ok">
            </form>
        </body>
        <footer>
            <script type="text/javascript">
              window.onload = function(){
                var ad = new advancedDate("1a");
                ad.appendInElement();
              }
            </script>
        </footer>
</html>





function advancedDate(id){
    this.id = id;
    this.createDOMElements();
}

advancedDate.prototype.createDOMElements = function(){
    var me = this;
    this.table = document.createElement("table");
    this.table.style.border = "Solid black 3px";

    //Create row 1
    var firstRow = this.table.insertRow(0);
    var secondRow = this.table.insertRow(1);
    var thirdRow = this.table.insertRow(2);
    var fourthRow = this.table.insertRow(3);

    var whenCellOne = firstRow.insertCell(0);
    this.repeat = document.createElement("select");
    this.repeat.name = "['"+me.id+"']['repeat']";
    this.repeat.appendChild(this.createOption("Varje", "0"));
    this.repeat.appendChild(this.createOption("Kommande", "1"));
    whenCellOne.appendChild(this.repeat);

     whenCellOne = firstRow.insertCell(1);
    this.often = document.createElement("select");
    this.often.name = "["+me.id+"][often]";
    this.often.appendChild(this.createOption("Vecka", "0"));
    this.often.appendChild(this.createOption("Månad", "1"));
    this.often.onchange = function(){ me.update(); };
    whenCellOne.appendChild(this.often);

    secondRow.insertCell(0);
    var dateCell = secondRow.insertCell(1);
    this.when = document.createElement("select");
    this.when.name = "['"+me.id+"']['when']";
    this.when.setAttribute("multiple","true");
    this.when.style.width = "300px";
    dateCell.appendChild(this.when);

    var dayCell = thirdRow.insertCell(0);
    dayCell.innerHTML = "Day:";

    var dayInputCell = thirdRow.insertCell(1);
    this.dayInput = document.createElement("input");
    this.dayInput.name = "['"+me.id+"']['when']";
    this.dayInput.setAttribute("type", "text");
    this.dayInput.onkeyup = function(){ me.update(); };
    this.dayInput.onblur = function(){ me.update(); };
    dayInputCell.appendChild(this.dayInput);

    var workCell = fourthRow.insertCell(0);
    workCell.innerHTML = "Arbetstid:";

    var workTimeInputCell = fourthRow.insertCell(1);
    this.workTimeInput = document.createElement("input");
    this.workTimeInput.name = "['"+me.id+"']['workTime']";
    this.workTimeInput.setAttribute("type", "text");
    this.workTimeInput.onkeyup = function(){ me.calculateTime(this); };
    this.workTimeInput.onblur = function(){ me.calculateTime(this); };
    workTimeInputCell.appendChild(this.workTimeInput);

    this.update();
};

advancedDate.prototype.createOption = function(text, value){
    var e = document.createElement("option");
    e.setAttribute("value",value);
    e.innerHTML = text;
    return e;
};

advancedDate.prototype.calculateTime = function(element){
    var pattern = /([0-9]{2}):([0-9]{2})([^0-9]+)([0-9]{2}):([0-9]{2})/g;
    if(element.value.match(pattern)){
        var result = pattern.exec(element.value);
        var time1 = (parseInt(result[1]) * 3600) + (parseInt(result[2]) * 60);
        var time2 = (parseInt(result[4]) * 3600) + (parseInt(result[5]) * 60);

        var max = Math.max(time1, time2);
        var min = Math.min(time1, time2);
        var time = max-min;

        element.value = Number((time/3600).toFixed(2));
    }
};

advancedDate.prototype.update = function(){

    var currentDay;

    try{
        currentDay = parseInt(this.dayInput.value);
    }catch(err){
        currentDay = -1;
    }

    var d = new Date();
    var month = d.getMonth();
    var year = parseInt(d.getFullYear())+1;
    var day = d.getDate();

    var months = [
        ["01, Januari",     "January",      0],
        ["02, Februari",    "February",     1],
        ["03, Mars",        "March",        2],
        ["04, April",       "April",        3],
        ["05, Maj",         "May",          4],
        ["06, Juni",        "June",         5],
        ["07, Juli",        "July",         6],
        ["08, Augusti",     "August",       7],
        ["09, September",   "September",    8],
        ["10, Oktober",     "October",      9],
        ["11, November",    "November",     10],
        ["12, December",    "December",     11]];

    var weeks = [
        ["Måndag",  "Monday"    ],
        ["Tisdag",  "Tuesday"   ],
        ["Onsdag",  "Wednesday" ],
        ["Torsdag", "Thursday"  ],
        ["Fredag",  "Friday"    ],
        ["Lördag",  "Saturday"  ],
        ["Söndag",  "Sunday"    ]];


    //Save the selected values
    var selected = [];
    try{
        for(var i=0; i<this.when.options.length; i++){
            if(this.when.options[i].selected)
                selected.push(this.when.options[i].value);
        }
    }catch(err){

    }

    if(this.often.value === "0"){
        this.when.options.length = 0;
        for(var x=0; x<weeks.length; x++)
            this.when.appendChild(this.createOption(weeks[x][0], weeks[x][1]));
        //Make extra invisable
        this.table.rows[2].style.display = 'none';
        this.dayInput.value = "";
    }

    if(this.often.value === "1"){
        this.when.options.length = 0;
        for(var y=0; y<months.length; y++)
            this.when.appendChild(
                this.createOption(
                    ((month > months[y][2] || (month === months[y][2] && currentDay < day)) ? year+ "-" : "") + months[y][0], months[y][1]));
        this.table.rows[2].style.display = 'table-row';
    }

    //Load selected again
    for(var z=0; z<this.when.options.length; z++){
        for(var j=0; j<selected.length; j++){
            if(this.when.options[z].value === selected[j]){
                this.when.options[z].selected="selected"; break;
            }
        }
    }

    //Dynamic height
    this.when.size = this.when.options.length;
};

advancedDate.prototype.appendInElement = function(){
    var e = document.getElementById(this.id);
    e.appendChild(this.table);
};

window.onload=函数(){
var ad=新的预付款日期(“1a”);
ad.附加物();
}
函数advancedDate(id){
this.id=id;
this.createdElements();
}
advancedDate.prototype.CreatedElements=函数(){
var me=这个;
this.table=document.createElement(“表”);
this.table.style.border=“纯黑3px”;
//创建第1行
var firstRow=this.table.insertRow(0);
var secondRow=this.table.insertRow(1);
var thirdRow=this.table.insertRow(2);
var fourthRow=this.table.insertRow(3);
var whenCellOne=第一行插入单元(0);
this.repeat=document.createElement(“选择”);
this.repeat.name=“['”+me.id+“]['repeat']”;
this.repeat.appendChild(this.createOption(“Varje”,“0”));
this.repeat.appendChild(this.createOption(“Kommande”,“1”));
whenCellOne.appendChild(this.repeat);
当cellone=firstRow.insertCell(1);
this.frequency=document.createElement(“选择”);
this.frequency.name=“[”+me.id+“][frequency]”;
this.frequency.appendChild(this.createOption(“Vecka”,“0”));
this.frequency.appendChild(this.createOption(“Månad”,“1”));
this.frequency.onchange=函数(){me.update();};
whenCellOne.appendChild(这个经常);
第二行插入单元(0);
var dateCell=secondRow.insertCell(1);
this.when=document.createElement(“选择”);
this.when.name=“['”+me.id+“]['when']”;
此.when.setAttribute(“多个”、“真”);
this.when.style.width=“300px”;
dateCell.appendChild(this.when);
var dayCell=thirdRow.insertCell(0);
dayCell.innerHTML=“天:”;
var dayInputCell=thirdRow.insertCell(1);
this.dayInput=document.createElement(“输入”);
this.dayInput.name=“['”+me.id+“]['when']”;
this.dayInput.setAttribute(“类型”、“文本”);
this.dayInput.onkeyup=函数(){me.update();};
this.dayInput.onblur=函数(){me.update();};
appendChild(this.dayInput);
var workCell=fourthRow.insertCell(0);
workCell.innerHTML=“Arbetstid:”;
var workTimeInputCell=fourthRow.insertCell(1);
this.workTimeInput=document.createElement(“输入”);
this.workTimeInput.name=“['”+me.id+“]['workTime']”;
this.workTimeInput.setAttribute(“type”、“text”);
this.workTimeInput.onkeyup=函数(){me.calculateTime(this);};
this.workTimeInput.onblur=function(){me.calculateTime(this);};
workTimeInputCell.appendChild(this.workTimeInput);
这个.update();
};
advancedDate.prototype.createOption=函数(文本,值){
var e=document.createElement(“选项”);
e、 setAttribute(“值”,值);
e、 innerHTML=文本;
返回e;
};
advancedDate.prototype.calculateTime=函数(元素){
var模式=/([0-9]{2}):([0-9]{2})([^0-9]+)([0-9]{2}):([0-9]{2})/g;
if(元素值匹配(模式)){
var result=pattern.exec(element.value);
var time1=(parseInt(结果[1])*3600)+(parseInt(结果[2])*60);
var time2=(parseInt(结果[4])*3600)+(parseInt(结果[5])*60);
var max=Math.max(time1,time2);
var min=Math.min(time1,time2);
var时间=最大最小值;
element.value=编号((时间/3600).toFixed(2));
}
};
advancedDate.prototype.update=函数(){
var当前日期;
试一试{
currentDay=parseInt(this.dayInput.value);
}捕捉(错误){
currentDay=-1;
}
var d=新日期();
var month=d.getMonth();
var year=parseInt(d.getFullYear())+1;
var day=d.getDate();
风险值月份=[
[“01,1月”,“1月”,0],
[“2月2日”、“2月1日],
[“03,火星”,“三月”,2],
[“4月4日”、“4月3日],
[“05,Maj”,“May”,4],
[“06,Juni”,“June”,5],
[“07,朱莉”,“7月”,6日],
[“08,Augusti”,“August”,7],
[“9月9日”、“9月8日],
[“10,Oktober”,“10月”,9日],
[“11月11日”、“11月10日],
[“12月12日”、“12月11日];
var周=[
[“Måndag”,“星期一”],
[“Tisdag”,“星期二”],
[“Onsdag”,“周三”],
[“托尔斯达克”,“星期四”],
[“Fredag”,“Friday”],
[“勒达格”,“星期六”],
[“Söndag”、“Sunday”];
//保存选定的值
所选var=[];
试一试{

对于(var i=0;i什么是“this”,发布更多代码。解释更多您可以检查表单以查看select元素是否添加到it@Legends“this”和“me”指的是JavaScript对象,我在整个代码中添加了pastebin链接
<html>
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
            <script type="text/javascript" src="./system/advancedDate.js"></script>
        </head> 
        <body>
            <form action="#" method="POST">
                <div id='1a'></div>
                <input type="submit" name="submit" value="ok">
            </form>
        </body>
        <footer>
            <script type="text/javascript">
              window.onload = function(){
                var ad = new advancedDate("1a");
                ad.appendInElement();
              }
            </script>
        </footer>
</html>





function advancedDate(id){
    this.id = id;
    this.createDOMElements();
}

advancedDate.prototype.createDOMElements = function(){
    var me = this;
    this.table = document.createElement("table");
    this.table.style.border = "Solid black 3px";

    //Create row 1
    var firstRow = this.table.insertRow(0);
    var secondRow = this.table.insertRow(1);
    var thirdRow = this.table.insertRow(2);
    var fourthRow = this.table.insertRow(3);

    var whenCellOne = firstRow.insertCell(0);
    this.repeat = document.createElement("select");
    this.repeat.name = "['"+me.id+"']['repeat']";
    this.repeat.appendChild(this.createOption("Varje", "0"));
    this.repeat.appendChild(this.createOption("Kommande", "1"));
    whenCellOne.appendChild(this.repeat);

     whenCellOne = firstRow.insertCell(1);
    this.often = document.createElement("select");
    this.often.name = "["+me.id+"][often]";
    this.often.appendChild(this.createOption("Vecka", "0"));
    this.often.appendChild(this.createOption("Månad", "1"));
    this.often.onchange = function(){ me.update(); };
    whenCellOne.appendChild(this.often);

    secondRow.insertCell(0);
    var dateCell = secondRow.insertCell(1);
    this.when = document.createElement("select");
    this.when.name = "['"+me.id+"']['when']";
    this.when.setAttribute("multiple","true");
    this.when.style.width = "300px";
    dateCell.appendChild(this.when);

    var dayCell = thirdRow.insertCell(0);
    dayCell.innerHTML = "Day:";

    var dayInputCell = thirdRow.insertCell(1);
    this.dayInput = document.createElement("input");
    this.dayInput.name = "['"+me.id+"']['when']";
    this.dayInput.setAttribute("type", "text");
    this.dayInput.onkeyup = function(){ me.update(); };
    this.dayInput.onblur = function(){ me.update(); };
    dayInputCell.appendChild(this.dayInput);

    var workCell = fourthRow.insertCell(0);
    workCell.innerHTML = "Arbetstid:";

    var workTimeInputCell = fourthRow.insertCell(1);
    this.workTimeInput = document.createElement("input");
    this.workTimeInput.name = "['"+me.id+"']['workTime']";
    this.workTimeInput.setAttribute("type", "text");
    this.workTimeInput.onkeyup = function(){ me.calculateTime(this); };
    this.workTimeInput.onblur = function(){ me.calculateTime(this); };
    workTimeInputCell.appendChild(this.workTimeInput);

    this.update();
};

advancedDate.prototype.createOption = function(text, value){
    var e = document.createElement("option");
    e.setAttribute("value",value);
    e.innerHTML = text;
    return e;
};

advancedDate.prototype.calculateTime = function(element){
    var pattern = /([0-9]{2}):([0-9]{2})([^0-9]+)([0-9]{2}):([0-9]{2})/g;
    if(element.value.match(pattern)){
        var result = pattern.exec(element.value);
        var time1 = (parseInt(result[1]) * 3600) + (parseInt(result[2]) * 60);
        var time2 = (parseInt(result[4]) * 3600) + (parseInt(result[5]) * 60);

        var max = Math.max(time1, time2);
        var min = Math.min(time1, time2);
        var time = max-min;

        element.value = Number((time/3600).toFixed(2));
    }
};

advancedDate.prototype.update = function(){

    var currentDay;

    try{
        currentDay = parseInt(this.dayInput.value);
    }catch(err){
        currentDay = -1;
    }

    var d = new Date();
    var month = d.getMonth();
    var year = parseInt(d.getFullYear())+1;
    var day = d.getDate();

    var months = [
        ["01, Januari",     "January",      0],
        ["02, Februari",    "February",     1],
        ["03, Mars",        "March",        2],
        ["04, April",       "April",        3],
        ["05, Maj",         "May",          4],
        ["06, Juni",        "June",         5],
        ["07, Juli",        "July",         6],
        ["08, Augusti",     "August",       7],
        ["09, September",   "September",    8],
        ["10, Oktober",     "October",      9],
        ["11, November",    "November",     10],
        ["12, December",    "December",     11]];

    var weeks = [
        ["Måndag",  "Monday"    ],
        ["Tisdag",  "Tuesday"   ],
        ["Onsdag",  "Wednesday" ],
        ["Torsdag", "Thursday"  ],
        ["Fredag",  "Friday"    ],
        ["Lördag",  "Saturday"  ],
        ["Söndag",  "Sunday"    ]];


    //Save the selected values
    var selected = [];
    try{
        for(var i=0; i<this.when.options.length; i++){
            if(this.when.options[i].selected)
                selected.push(this.when.options[i].value);
        }
    }catch(err){

    }

    if(this.often.value === "0"){
        this.when.options.length = 0;
        for(var x=0; x<weeks.length; x++)
            this.when.appendChild(this.createOption(weeks[x][0], weeks[x][1]));
        //Make extra invisable
        this.table.rows[2].style.display = 'none';
        this.dayInput.value = "";
    }

    if(this.often.value === "1"){
        this.when.options.length = 0;
        for(var y=0; y<months.length; y++)
            this.when.appendChild(
                this.createOption(
                    ((month > months[y][2] || (month === months[y][2] && currentDay < day)) ? year+ "-" : "") + months[y][0], months[y][1]));
        this.table.rows[2].style.display = 'table-row';
    }

    //Load selected again
    for(var z=0; z<this.when.options.length; z++){
        for(var j=0; j<selected.length; j++){
            if(this.when.options[z].value === selected[j]){
                this.when.options[z].selected="selected"; break;
            }
        }
    }

    //Dynamic height
    this.when.size = this.when.options.length;
};

advancedDate.prototype.appendInElement = function(){
    var e = document.getElementById(this.id);
    e.appendChild(this.table);
};