Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   jQuery - осуществление динамического подсчета (https://javascript.ru/forum/jquery/33767-jquery-osushhestvlenie-dinamicheskogo-podscheta.html)

ОлегА 07.12.2012 15:48

ох многовато приложил, ща я тебе алгоритм накину


<html>
<head>
<script>
$(function(){
    
    function counter(class_name){
        var total = 0;
        
        $('#tovar .'+class_name).each(function(){        
            total += Number($(this).text());
        });
        
        $('#tovar .'+ class_name +'_total').html( total );    
    }
    
    counter('weight'); counter('sum');
        
    $('#start').live('click', function(){
        counter('weight');
        counter('sum');
    });
    
    $('#tovar tr').live('dblclick', function(){
       $(this).remove();
       counter('weight'); counter('sum'); 
    });
});
</script>
</head>
<body>
    <table id="tovar">
        <tbody>
            <tr>
                <td>товар1</td><td class="weight">20</td><td class="sum">200</td>
            </tr>
            <tr>
                <td>товар2</td><td class="weight">40</td><td class="sum">2050</td>
            </tr>
            <tr>
                <td>товар3</td><td class="weight">60</td><td class="sum">2065</td>
            </tr>
        </tbody>
        <tfoot>
            <tr>
                <th>Общий вес</th><th colspan="2" class="weight_total"></th>
            </tr>    
            <tr>
                <th>Общая сумма</th><th colspan="2" class="sum_total"></th>
            </tr>
        </tfoot>
    </table>
    <input type="button" id="start" value="посчитать вес">
</body>
</html>


принцип работы моего кода таков - при загрузке страницы, подсчитываются общий вес и сумма товаров, после загрузки если дважды кликнуть по одному товару, то он удалится и общий вес и сумма пересчитаются, так можно пересчитывать нажатием на кнопку, ну а если добавлен новый товар, тот же принцип как и с удалением, ну его думаю сам допилишь

derbass 07.12.2012 15:53

Да, приложил не то слово как много)) Ещё раз приношу извинения) Сейчас беру напилник и пилю) Спасибо за наводку! Есть нескромный вопрос - можно ли будет отписаться тебе на мыло, если будут вопросы?

ОлегА 07.12.2012 15:54

вот это трудночитаемый код,

$.post("/ves/function.inc.php", {'action':action,'type':type,'din':din,'diam':diam,'length':length,'rate':rate,'ves':ves},


лучше делайте так

$.post("/ves/function.inc.php", {
     'action' : action,
     'type'   : type,
     'din'     : din,
     'diam'   : diam,
     'length' : length,
     'rate'    : rate,
     'ves'     : ves
},


это не ошибка, просто так на много наглядней))

ОлегА 07.12.2012 15:54

пиши, не вопрос, но я редко туда захожу, лучше тут в личку пиши

derbass 07.12.2012 16:13

Понял, мой косяк. Читабельность кода следует чтить:)

derbass 07.12.2012 16:21

это у нас получается анонимная функция, если я правильно понимаю.
$(function(){
    function counter(class_name){
        var total = 0;
        $('#tovar .'+class_name).each(function(){       
            total += Number($(this).text());
        });
        $('#tovar .'+ class_name +'_total').html( total );   
    }
    counter('weight'); counter('sum');
    $('#start').live('click', function(){
        counter('weight');
        counter('sum');
    });
    $('#tovar tr').live('dblclick', function(){
       $(this).remove();
       counter('weight'); counter('sum');
    });
});

А как можно сделать ,что бы я мог считать общий вес, при изменении вес какого-нибудь товара?
$("input#weight").live("change", function() {
    var _this = this;
    chWeight(_this);
});

...
...
...
и её обработка:
function chWeight(_this) {
    var num = $(_this).attr('class').slice(1);
    var weight= $("input#weight.n"+num).val();
    var total = 0;
        $('#tovar .'+class_name).each(function(){       
            total += Number($(this).text());
        });
        $('#tovar .weight').html( total );   
    }

});

derbass 07.12.2012 16:24

Мне просто вот что инетересно - как правильн оразграничить, что бы они обе считали свои задачи, отдельно. Когда у меня функции не анонимные ,я могу их добавить, например, и в свой обработчик нажатия кнопки "+" при добавлении строки, и общее количество веса или цены у меня пересчитается

ОлегА 07.12.2012 16:35

что бы change работал нужно его привязать к текстовому поле например:

<input type="text" value="20" class="input_sum">

$('.input_sum').live('change', function(){ 
alert($(this).val())
})

derbass 07.12.2012 16:45

Пытаюсь подвязать на свою задачу, в принципе пока ясно)

derbass 07.12.2012 16:51

$("input#allCount").live("change", function() {
    var _this = this;
    chCount(_this);
});
...
...
function chCount(_this){
		 var total = 0;
        $('input#rate').each(function(){       
            total += Number($(this).text());
        });
        $('input#rate').html( total );   
    }

привязал к элементу, указал где и что считать, добавил взов функции пересчета при нажатии кнопки добавить и удалить. Ппц, все равно одна и та же беда


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