Сценарий с установленным флажком считает не отмеченные флажки в индексе? - PullRequest
1 голос
/ 31 декабря 2011

Этот скрипт извлекает данные из флажков, чтобы определить информацию, которую форма отправляет в 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 ]

1 голос
/ 31 декабря 2011

Ваш код имеет несколько проблем, кроме нумерации:

Функция имеет параметр 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
    }    
}
0 голосов
/ 31 декабря 2011

Попробуйте вместо этого использовать пользовательский счетчик:

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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...