Javascript флажки неверный расчет - PullRequest
2 голосов
/ 22 апреля 2011

Эй, ребята, у меня есть 6 флажков, и я использую их значения "rel =", чтобы сложить и отобразить общую сумму. Однако, если я установлю флажки 1 и 3 и 6, сложение будет игнорироваться и не будет добавлено к сумме. Таким образом, в основном проверяются самые низкие и самые высокие чекбоксы, а не все проверенные.

Хотите знать, если кто-нибудь может определить причину.

$(document).ready(function() {
    function recalculate() {
        var sum = 0;
        var base = 0;
        var d=new Date();
        var theDay=d.getDay();
        switch (theDay)
        {
            case 6:
              base = 30;
            break;
            case 0:
              base = 30;
              break;
            default:
            base = 49 ;
        }

        $("input[type=checkbox]:checked").each(function() {
             sum = parseInt($(this).attr("rel")) + base;
        });

        $("#output").html(sum);
    }

    $("input[type=checkbox]").change(function() {
        recalculate();
    });

});

Ответы [ 4 ]

2 голосов
/ 22 апреля 2011

Вы перезаписываете значение sum каждый раз в цикле each().Вот что вы можете сделать:

 sum = base;
 $("input[type=checkbox]:checked").each(function() {
     sum += parseInt($(this).attr("rel"));
 });
1 голос
/ 22 апреля 2011

Предположим, вам нужно изменить эту строку:

$("input[type=checkbox]:checked").each(function() {
  sum = parseInt($(this).attr("rel")) + base;
});

На это:

$("input[type=checkbox]:checked").each(function() {
  sum += parseInt($(this).attr("rel")) + base;
});

С вашим текущим кодом сумма фактически не рассчитывается, так каккаждый раз, когда вы получаете значение rel= для следующего флажка, вы перезаписываете предыдущее значение суммы.

EDIT: Если вы не хотите добавлять базу каждый разВы можете просто переместить это назначение из цикла.Как это:

sum = base;
$("input[type=checkbox]:checked").each(function() {
  sum += parseInt($(this).attr("rel"));
});
0 голосов
/ 22 апреля 2011

Вы сбрасываете сумму для каждого флажка в коде ниже:

$("input[type=checkbox]:checked").each(function() {
     sum = parseInt($(this).attr("rel")) + base;
});
0 голосов
/ 22 апреля 2011

try

$("input[type=checkbox]").click(function() {
        recalculate();
    });

атрибут rel для тега привязки

и вместо атрибута rel используйте значение или идентификатор

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...