$(function() { var fix_float_input = function (e) { var el = $(this); var new_val = fix_float_string(el.val()); if (new_val != el.val()) el.val(new_val); } var calc_summa = function (e) { var el = $(this); var qty = parseFloat(el.closest('tr.row').find('td.qty input').val()); var price = parseFloat(el.closest('tr.row').find('td.price input').val()); var total_price = qty * price; if (total_price) el.closest('tr.row').find('td.total_price input').val(total_price.toFixed(2)); } var calc_itogo_nds = function() { $('#itogo_nds_text').html('НДС ' + $('#id_nds_value option:selected').text()); var nds = parseFloat($('#id_nds_value').val()) * parseFloat($('#itogo').html()) / 100; $('#itogo_nds').html(nds.toFixed(2)); } window.calc_itogo = function (e) { var itogo_sum = 0; $('#tbl_items').find('.total_price input:visible').each(function() { var itogo_sum_row = $(this).val() ? parseFloat($(this).val()) : 0; itogo_sum += itogo_sum_row; }) $('#itogo').html(itogo_sum.toFixed(2)); calc_itogo_nds(); } window.set_events = function set_events() { $("#tbl_items tr.row td.qty input").on('keyup', fix_float_input); $("#tbl_items tr.row td.price input").on('keyup', fix_float_input); $("#tbl_items tr.row td.debit input").on('keyup', fix_float_input); $("#tbl_items tr.row td.credit input").on('keyup', fix_float_input); // not formset fields though... $("div#saldo_debit input").on('keyup', fix_float_input); $("div#saldo_credit input").on('keyup', fix_float_input); $("#tbl_items tr.row td.qty input").on('keyup', calc_summa); $("#tbl_items tr.row td.price input").on('keyup', calc_summa); $("#tbl_items tr.row td.qty input").blur(window.calc_itogo); $("#tbl_items tr.row td.price input").blur(window.calc_itogo); $("#tbl_items tr.row td.total_price input").blur(window.calc_itogo); //$('input[name=nds_type]').change(calc_itogo_nds); $('#id_nds_value').change(calc_itogo_nds); // //$("#tbl_items tr.row td.qty input").blur(calc_itogo_nds); //$("#tbl_items tr.row td.price input").blur(calc_itogo_nds); //$("#tbl_items tr.row td.total_price input").blur(calc_itogo_nds); } window.set_events(); window.calc_itogo(); calc_itogo_nds(); }) function fix_float_string(val) { try { var part1, part2, lastpos; lastpos = val.lastIndexOf('.'); if (lastpos != -1) { // string have at least one dot part1 = val.substr(0, lastpos); part2 = val.substr(lastpos+1); val = part1.replace('.', '').replace(',', '') + '.' + part2.replace('.', '').replace(',', ''); } else { lastpos = val.lastIndexOf(','); if (lastpos != -1) { // string have at least one comma part1 = val.substr(0, lastpos); part2 = val.substr(lastpos+1); val = part1.replace('.', '').replace(',', '') + '.' + part2.replace('.', '').replace(',', ''); } } } catch (e) { if (!e instanceof TypeError) throw(e); } return val; }