Динамический подсчет в таблице
нашел решение вопроса ,подобному моему, но толком не осознал, может кто пояснит?
http://javascript.ru/forum/jquery/33...podscheta.html делаю магазин. при статичном коде - обсчитываю и изменяю поля, как мне требуется. при попытке добавления блока элементов, мой скрипт подсчета требуется поменять, а как не могу понять. Код: <script type="text/javascript"> function TotalSum() { if(1) { // Расчитываем сумму покупки var mail12 = document.getElementById('mail_12').value; // Количество единиц товара var mail50 = document.getElementById('mail_50').value; // Цена одной единицы var mail54 = document.getElementById('mail_54').value; // Вес покупки var tot = mail12*mail50; // Расчитываем итоговую сумму var mail53 = tot; // Общая сумма покупки var input155 = document.getElementById('input_155').value; // Курс юаня input155 = input155.replace(",","."); //total = (tot*+input155+25*+input155)+(tot*+input155+25*+input155)*0.25+(mail54*170); total = (tot*+input155)+(tot*+input155)*0.15+(mail54*250); tot = accounting.formatMoney(tot, "RUR", 2, " ", ",", "%v %s"); // подставляем его в поле на странице document.getElementById('mail_53').value = tot; total = accounting.formatMoney(total, "RUR", 2, " ", ",", "%v %s"); document.getElementById('mail_56').value = total; // подставляем его в поле на странице //alert('total = ' +total); }; } </script> Часть кода HTML, которые этот скрипт обсчитывает: <ul> <!-- duplicate --> <li> <div style="position: relative;"> <a name="top"></a> <table id="table_container"></table> <br /> <a href="#top"><img style="background: url('/images/stories/apply.gif') no-repeat scroll 80px -5px transparent;" alt="Добавить товар" id="add" onclick="return add_new_image();"> </a> <br /> </div> </li> <!-- /duplicate --> </ul> вот этим скриптом добавляю эту и последующие части блока: var total = 0; function add_new_image(){ total++; jQuery('<tr>') .attr('id','tr_image_'+total) .css({lineHeight:'20px'}) /* td */ .append ( jQuery('<td>') .attr('id','td_title_'+total) .css({paddingRight:'5px',width:'auto',border:'1px solid'}) /* li */ .append ( jQuery('<li>') .attr('id','id_'+(8+total)) .attr('class','form-line form-line-column') /* div */ .append( jQuery('<div>') .attr('id','cid_'+(8+total)) .attr('class','form-input form_element cf_textbox-wide') .append( jQuery('<label>Ссылка на страницу:<span class="form-required">*</span></label>') .attr('id','label_'+(8+total)) .attr('class','form-label-wide') .attr('for','mail_'+(8+total)) ) .append( jQuery('<input type="text" />') .attr('id','mail_'+(8+total)) .attr('name','mail_'+(8+total)) .attr('class','form-textbox validate[required]') .attr('data-type','input-textbox') .attr('tabindex',5+total) .attr('size','30') .attr('value','') ) ) .append( jQuery('<div>') .attr('id','cid_'+(9+total)) .attr('class','form-input form_element cf_textbox-wide') .append( jQuery('<label>Ссылка на изображение:</label>') .attr('id','label_'+(9+total)) .attr('class','form-label-wide') .attr('for','mail_'+(9+total)) ) .append( jQuery('<input type="text" />') .attr('id','mail_'+(9+total)) .attr('name','mail_'+(9+total)) .attr('class','cf_inputbox form-textbox') .attr('data-type','input-textbox') .attr('tabindex',6+total) .attr('size','30') .attr('title','введите адрес страницы с изображенем') .attr('maxlength','150') ) ) /* /div */ // ) /* /li */ /* li */ // .append ( // jQuery('<li>') .attr('id','id_'+(7+total)) .attr('class','form-line form-line-column') /* div */ .append( jQuery('<div>') .attr('class','form-input form_element cf_textbox-wide') .append( jQuery('<label>Размер:</label>') .attr('class','form-label-wide') ) .append( jQuery('<input type="text" />') .attr('id','text_'+(7+total)) .attr('name','text_'+(7+total)) .attr('class','cf_inputbox required') .attr('tabindex',7+total) .attr('size','30') .attr('maxlength','80') .attr('title','введите размер товара') ) ) .append( jQuery('<div>') .attr('class','form-input form_element cf_textbox-wide') .append( jQuery('<label>Цвет:</label>') .attr('id','label_'+(8+total)) .attr('class','cf_inputbox required') ) .append( jQuery('<input type="text" />') .attr('id','text_'+(8+total)) .attr('name','text_'+(8+total)) .attr('class','cf_inputbox required') .attr('tabindex',8+total) .attr('size','30') .attr('title','введите цвет товара') .attr('maxlength','150') ) ) /* /div */ // ) /* /li */ /* li */ // .append ( // jQuery('<li>') .attr('id','id_'+(11+total)) .attr('class','form-line form-line-column') /* div */ .append( jQuery('<div>') .attr('id','cid_'+(11+(11+total))) .attr('class','form-input form_element cf_textbox-wide') .append( jQuery('<label>Количество:<span class="form-required">*</span></label>') .attr('id','label_'+(11+total)) .attr('class','form-label-wide') .attr('for','mail_units_'+(+total)) ) .append( jQuery('<input type="text" />') .attr('id','mail_units_'+(+total)) .attr('name','mail_units_'+(+total)) .attr('class','form-textbox validate[required, Numeric]') .attr('data-type','input-textbox') .attr('tabindex',9+total) .attr('size','30') .attr('value','') .attr('onkeyup','TotalSum()') ) ) .append( jQuery('<div>') .attr('id','cid_'+(49+(49+total))) .attr('class','form-input form_element cf_textbox-wide') .append( jQuery('<label>Цена за единицу ¥:<span class="form-required">*</span></label>') .attr('id','label_'+(49+total)) .attr('class','form-label-wide') .attr('for','mail_'+(49+total)) ) .append( jQuery('<input type="text" />') .attr('id','mail_'+(49+total)) .attr('name','mail_'+(49+total)) .attr('class','form-textbox validate[required, Numeric]') .attr('data-type','input-textbox') .attr('tabindex',10+total) .attr('size','30') .attr('value','') .attr('onkeyup','TotalSum()') ) ) /* /div */ // ) /* /li */ /* li */ // .append ( // jQuery('<li>') .attr('id','id_'+(53+total)) .attr('class','form-line form-line-column') /* div */ .append( jQuery('<div>') .attr('id','cid_'+(53+(53+total))) .attr('class','form-input form_element cf_textbox-wide') .append( jQuery('<label>Вес:<span class="form-required">*</span></label>') .attr('id','label_'+(53+total)) .attr('class','form-label-wide') .attr('for','mail_'+(53+total)) ) .append( jQuery('<input type="text" />') .attr('id','mail_'+(53+total)) .attr('name','mail_'+(53+total)) .attr('class','form-textbox validate[required, Numeric]') .attr('data-type','input-textbox') .attr('tabindex',11+total) .attr('size','30') .attr('value','0') .attr('maxlength','6') .attr('onkeyup','TotalSum()') ) ) /* /div */ ) /* /li */ ) /* /td */ .append( jQuery('<td>') .css({width:'30px',paddingRight:'5px',textAlign:'left',verticalAlign:'top'}) // .css({width:'30px',text-align:'center',vertical-align:'top'}) // .css({paddingRight:'5px',width:'auto',border:'1px solid'}) .append( jQuery('<span id="progress_'+total+'" class="padding5px"><a href="#" onclick="jQuery(\'#tr_image_'+total+'\').remove();" class="ico_delete"><img src="/images/add_image/delete.png" alt="del" border="0"></a></span>') ) ) .appendTo('#table_container'); } $(document).ready(function() { add_new_image(); }); а вот обсчитать добавляемую часть кода уже мозгов не хватает (( при каждом добавлении элементы id меняются, блоки могут добавляться и удаляться - значит и нумерация элементов тоже измениться! думал добавлять вместе с кодом HTML и код JS, который обсчитывает добавляемый блок, но не уверен, что это правильное решение. |
muraig,
Воу, Воу! очень много кода. Честно говоря неохота столько читать и разбираться. Вы опубликовали очень много кода. Пожалуйста, локализуйте проблему! Выделите фрагмент кода, по которому есть вопрос и опубликуйте его отдельно. И, по возможности, уберите из кода мусор, чтобы нам легче было сориентироваться и помочь решить вашу проблему. Спасибо. P.S. код форматируют специальные теги [ js ] ... [/js], [ html ] ... [/html] и другие аналогичные, сам. http://javascript.ru/formatting Для добавления блоков верстки есть шаблонизаторы (я например пользую underscore) они позволяют заменить простыню аппендов 1-й или двумя строками |
спасибо за ответ!
теги [ js ] ... [/js], [ html ] ... [/html] я применил в данном сообщении. "заменить простыню аппендов " - это я пока еще не могу реализовать, слишком большая разница между perl и js, не понимаю как можно сделать. Суть: 1. С помощью JS формирую таблицу с динамически назначаемыми ID 2. Необходимо просчитать ячейки таблицы и вывести результат в ячейку. 3. Не могу сообразить как просчитывать ячейки, ID которых, еще не известны(формируются динамически) При известных ID я это делаю с помощью имеющегося кода JS |
Цитата:
|
пытаюсь реализовать такой код:
var content = jQuery('#sale'); counterHtml = jQuery('script', content).next().clone().wrap('<script type="text/javascript"></script>'); jQuery('.form').prepend("<script>" +counterHtml+ "</script>"); выдает ошибку: SyntaxError: missing ] after element list вообще в другом файле: jquery.min.js:1 я хочу добавить код скрипта для обсчета ячеек вот так: jQuery('.form').prepend('<script type="text/javascript">\ function TotalSum+total() {\ var mail12 = document.getElementById(\'mail_units_\'+total).value;\ var mail50 = document.getElementById(\'mail_50\'+total).value;\ var mail54 = document.getElementById(\'mail_54\'+total).value;\ var tot = mail12*mail50;\ var mail53 = tot;\ var input155 = document.getElementById(\'input_155\'+total).value;\ input155 = input155.replace(",",".");\ total = (tot*+input155)+(tot*+input155)*0.15+(mail54*250);\ tot = accounting.formatMoney(tot, "RUR", 2, " ", ",", "%v %s");\ document.getElementById(\'mail_53\'+total).value = tot;\ total = accounting.formatMoney(total, "RUR", 2, " ", ",", "%v %s");\ document.getElementById(\'mail_56\'+total).value = total;\ }\ </script>'); что бы переменную +total использовать и для идентификации ID и для изменения скрипта. не получается. |
решил свой вопрос о создании скрипта на странице с изменяемым содержимым:
var newScript = document.createElement("script"); newScript.type = "text/javascript"; var txt = 'txt 1' +total; newScript.text = '\n\ function TotalSum'+ total +'() {\n'+ 'var mail12 = document.getElementById(\'mail_units_'+(+total)+'\').value;\n\ var mail50 = document.getElementById(\'mail_'+50+(+total)+'\').value;\n\ var mail54 = document.getElementById(\'mail_'+54+(+total)+'\').value;\n\ var tot = mail12*mail50;\n\ var mail53 = tot;\n\ var input155 = document.getElementById(\'input_'+155+(+total)+'\').value;\n\ input155 = input155.replace(",",".");\n\ total = (tot*+input155)+(tot*+input155)*0.15+(mail54*250);\n\ tot = accounting.formatMoney(tot, "RUR", 2, " ", ",", "%v %s");\n\ document.getElementById(\'mail_'+53+(+total)+'\').value = tot;\n\ total = accounting.formatMoney(total, "RUR", 2, " ", ",", "%v %s");\n\ document.getElementById(\'mail_'+56+(+total)+'\').value = total;\n\ }\n\ '; jQuery('.form').prepend(newScript); Переменная total менят значение вместе с этим добавляется именно тот скрипт, что требуется. |
Часовой пояс GMT +3, время: 14:17. |