此脚本从复选框中提取数据,以确定表单发送给PayPal的信息。 PayPal只接受没有任何间隙的购物车;但是,此脚本计算索引中未选中的框,这使得购物车无效(“item_name_1”,“item_name_3”,“item_name_7”)。如何使脚本生成无间隙连续的数字(“item_name_1”,“item_name_2”,“item_name_3”)?
function updateCart(form) {
var cart = "";
var P = $('#P');
for (var i = 0; i < document.getElementById('sList').P.length; i++) {
if (document.getElementById('sList').P[i].checked)
cart += '<input type="hidden" name="item_name_' + (i+1) + '" value="' + document.getElementById('sList').P[i].value.substring(6) + '"><input type="hidden" name="amount_' + (i+1) + '" value="' + document.getElementById('sList').P[i].value.substring(0, [5]) + '">'
}
if (cart == "") {
alert("Please select products")
} else alert(cart);
$('#cart_items').html("" + cart);
return false;
}
答案 0 :(得分:1)
除了编号之外,您的代码还有一些问题:
该函数具有永不使用的form
参数。
document.getElementById()
返回单个DOM元素或null。你的P
变量是一个jQuery对象,鉴于你是通过id选择的,应该保留一个元素或者没有 - 只要你试图使用带有索引的P
,你似乎认为它可以有多个匹配元素,但只有当你有多个具有相同id的元素是无效的html(这会产生不可靠的结果 - 所以如果是这样你应该修复它:你可以使用相同名称的元素,但不能使用相同的id)
无论哪种方式尝试使用P作为.getElementById()
返回的DOM元素的属性都没有任何意义。所以你所说的任何地方document.getElementById('').P.something
都是错误的。
至于为隐藏输入生成唯一编号,您只需要一个变量用于循环计数器i
,然后需要第二个(新)变量用于输入计数,我们称之为{{1} }。仅在n
语句中增加n
。或者,如果使用jQuery循环,则不需要if checked
,只需i
。如果你展示你的HTML我可以正确地更新它而不是猜测,但是像这样:
n
答案 1 :(得分:0)
尝试使用自定义计数器:
function updateCart(form) {
var cart = "";
var P = $('#P');
var counter = 0;
for (var i = 0; i < document.getElementById('sList').P.length; i++) {
if (document.getElementById('sList').P[counter ].checked) {
cart += '<input type="hidden" name=" + (counter + 1) + '" value="' + document.getElementById('sList').P[counter].value.substring(6) + '"><input type="hidden" name="amount_' + (counter + 1) + '" value="' + document.getElementById('sList').P[counter].value.substring(0, [5]) + '">';
counter++;
}
}
if (cart == "") {
alert("Please select products")
} else alert(cart);
$('#cart_items').html("" + cart);
return false;
}