Php 将多个动态文本框放入javascript数组中
以下代码仅将一个文本框存储到数组中。我希望有一个多维数组,动态存储多个动态文本框 代码当前要求用户输入4个输入,我使用%将其连接成一个字符串,并将其发布到php页面 我希望它获取所有4个输入,并将它们存储在一个数组中,该数组中每个动态添加的文本框存储如下: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(); 然
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问题在