Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Суммировать значения полей (https://javascript.ru/forum/events/47033-summirovat-znacheniya-polejj.html)

runapa 06.05.2014 01:49

Суммировать значения полей
 
Здравствуйте!

У меня есть форма, поля в которой создаются динамически.

var total = 0;
    function add_new_field(){
        total++;
        $('<tr>')
        .attr('id','tr_image_'+total)
        .css({lineHeight:'20px'})
        
        .append (
            $('<td valign="top" align="center">')
            .attr('id','quantity'+total+'')
            .attr('class','sum')
            .append(
                $('<input type="text" />')
                .css({width:'60px'})
                .attr('id','quantity[]')
                .attr('name','quantity[]')
            )		
        )
        .append (
            $('<td valign="top">')
            .attr('id','price'+total+'')
            .attr('class','sum')
            .append(
                $('<input type="text" />')
                .css({width:'60px'})
                .attr('id','price'+total+'')
                .attr('name','price[]')
            )		
        )	
        .append (
            $('<td valign="top">')
            .attr('id','summa'+total+'')
            .attr('class','sum')
            .append(
                $('<input type="text" />')
                .css({width:'60px'})
                .attr('id','summa[]')
                .attr('name','summa[]')
            )		
        )
        .append (
            $('<td valign="top" align="center">')
            .css({width:'40px'})
            .append (
                $('<span id="progress_'+total+'" class="padding5px"><a  href="#" onclick="$(\'#tr_image_'+total+'\').remove();" class="ico_delete"><img src="img/delete.png" alt="del" border="0"></a></span>')
            )
        )
        .appendTo('#table_container');
    }

    $(document).ready(function() {
        add_new_field();
    });


Я написал код который суммирует значения двух полей и выводит его в третье.

function sum() {
        var
            price = $('td#price'+total+' input').val(),
            quantity = $('td#quantity'+total+' input').val();
            $('td#summa'+total+' input').val(price * quantity);
    }
    
    $(document).focus().click(function() {
        $('td#price'+total+' input, td#quantity'+total+' input').keyup(sum);
        $('td#summa'+total+' input').change(sum);
    });


Проблема в том, что если добавить новые инпуты, в тех что были добавлены ранее, перестаёт работать функция. Я понимаю, что проблема в переменной total, а вот как мне сделать так, чтобы функция срабатывала во всех инпутах - в новых, и тех что были добавлены ранее ?

Octane 06.05.2014 01:58

http://api.jquery.com/delegate/

runapa 21.05.2014 01:21

Спасибо за подсказку.


Часовой пояс GMT +3, время: 03:31.