Ваш код имеет несколько проблем, кроме нумерации:
Функция имеет параметр form
, который никогда не используется.
document.getElementById()
возвращает либо один элемент DOM, либо ноль,Ваша переменная P
является объектом jQuery, который, если вы выбираете по id, должен содержать один элемент или ни одного - учитывая, что вы пытаетесь использовать P
с индексом, который, как вам кажется, может иметь несколько совпадающих элементов, но этотолько если у вас есть несколько элементов с одинаковым идентификатором, который является недействительным HTML (что даст ненадежные результаты - так что если это так, вы должны исправить это: вы можете элементы с одинаковым именем, но не с тем же идентификатором).
В любом случае не имеет смысла пытаться использовать P в качестве свойства элемента DOM, возвращаемого .getElementById()
.Поэтому везде, где вы сказали, что document.getElementById('').P.something
неверно.
Для генерации уникальной нумерации для скрытых входов вам просто нужна одна переменная для счетчика цикла, i
, а затем вторая (новая) переменная.для подсчета входных данных назовем это n
.Увеличивайте n
только в пределах оператора if checked
.Или если вы зацикливаетесь на jQuery, вам не нужно i
, просто n
.Если вы покажете свой HTML, я мог бы обновить это правильно, а не угадывать, но что-то вроде этого:
function updateCart(form) {
// first remove any hidden inputs from a previous unsuccessful submit
// (this may be optional depending on whether you're submitting with ajax
// and/or potentially aborting the submit for other reasons, e.g., if you're
// submitting with ajax and the web server might return an error you need to
// remove the previous hiddens if the user tries again)
$('#cart_items input[type="hidden"]').remove();
// now process each checkbox and add numbered elements for each checked one
var n = 0,
$f = $("#cart_items");
// you may need to vary the selector here because
// I don't know the names of your elements
$('input[type="checkbox"]').each(function() {
if (this.checked) {
// following is a tidied up version of your input creation code,
// which assumes that the value attribute of the checkbox holds
// the item name and price information.
n++;
$f.append('<input type="hidden" name="item_name' + n +
'" value="' + this.value.substring(6) + '">');
$f.append('<input type="hidden" name="amount_' + n +
'" value="' + this.value.substring(0,5) + '">');
}
});
if (n === 0) {
// no hiddens were added
alert("Please select products");
return false;
} else {
// success, inputs added above
return true; // or submit or whatever
}
}