Расчет итоговых строк в форме с использованием динамически добавляемых строк - PullRequest
0 голосов
/ 21 марта 2012

Я создаю форму для ввода счета с динамически добавляемыми строками (, как показано на этом изображении )

Я использую jquery 1.6.2 для вычисления итоговой суммы, суммирования итогов всех строк, расчета налога и отображения итогов. Проблема, с которой я столкнулся, заключается в том, что вычисление итоговой строки работает только для первой добавленной строки. Как вы можете видеть на изображении выше, первая строка (Элемент 1) в порядке (2 * 30 = 60), но вторая строка (Элемент 2) показывает ту же сумму, что и первая (она должна быть 4 * 100). = 400). Вот код для этой части:

<script type="text/javascript">
var $k = jQuery.noConflict();

$k(function (){
    $k('#item_form').live("keyup", "input[name^=linetotal]", function() {
        var quantity = $k('input[name^=quantity]').val();
        var unitprice = $k('input[name^=unitprice]').val();
        $k('input[name^=linetotal]').val(quantity*unitprice);

        var sum = $k('input[name^=linetotal]').sum();

        $k('#subtotal').val(sum);
        $k('#tax').val(Math.round(sum*10*100)/100);
        $k('#total').val(Math.round((sum+Math.round(sum*10*100)/100)*100)/100);
     });
});
</script>   

Есть идеи о том, что я должен попробовать? Спасибо всем!

Ответы [ 2 ]

1 голос
/ 21 марта 2012

Вы используете $k(input[name^=quantity]').val();, чтобы получить количество / единицу цены, но это захватывает все количество / единицу цены, и .val() получает значение первого.

Вам нужно получить один на той же линии, хотя странно, что вы ожидаете keyup на linetotal.Разве вы не хотите использовать keyup для quantity и unitprice?

 $k('input[name^=quantity], input[name^=unitprice]').live("keyup", function() {
        var quantity = parseFloat($k(this).parent().find('input[name^=quantity]').val());
        var unitprice = parseFloat($k(this).parent().find('input[name^=unitprice]').val());
        $k(this).siblings('input[name^=linetotal]').val(quantity*unitprice);

        var sum = $k(this).siblings('input[name^=linetotal]').sum();

        $k('#subtotal').val(sum);
        $k('#tax').val(Math.round(sum*10*100)/100);
        $k('#total').val(Math.round((sum+Math.round(sum*10*100)/100)*100)/100);
     });
});

Базовая демонстрация jsfiddle: http://jsfiddle.net/jtbowden/YxJCF/

0 голосов
/ 21 марта 2012

Я полагаю, это связано с тем, что он принимает первый вход [имя ^ количество] и первый вход [имя ^ единица измерения], через который он проходит. Поскольку обе строки имеют одинаковые имена, вы должны охватить свой код, чтобы убедиться, что он извлекает только из своей строки, а не из других. Имеет ли это смысл?

...