选中的框脚本是否计算索引中未选中的框?

时间:2011-12-31 03:17:03

标签: javascript jquery checkbox paypal indexing

此脚本从复选框中提取数据,以确定表单发送给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;
}

2 个答案:

答案 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;
}