Счётчик стоимости - необходимо мнение экспертов
Друзья, добрый день. В программировании не силен, но постепенно хочу всему научиться. Написал свой первый js-скрипт - всё работает, но я более чем уверен, что сделано громоздко и не по-человечески. Заинтересован именно в обучении, а не прошу написать код за меня. Буду рад услышать ваши замечания и советы. Заранее большое спасибо!
Итак. Использую 2 таблицы в БД: - в 1-й лежат: id типовой работы, её название и цена, id типа работы - во 2-й: id типа работы и название типа работы Нужно всё представить в виде калькулятора. Примерный вид представлен в изображении. ![]() Собственно Кол-во пользователь прописывает через инпуты самостоятельно. Без перезагрузки страницы выводятся аутпуты: индивидуальная сумма для каждой работы, промежуточный итог по каждому типу работ, общая конечная сумма. Ниже представлен код (т.к. использовалась джумла, то присутствует характерный код в работе с БД): Код:
$db = JFactory::getDbo(); |
-10 в карму....спасибо, очень дружелюбная атмосфера...
|
вот только я не пойму, причем здесь пхп? форум js программистов... нажмите ctrl + u и получите сгенерированную страницу
|
но основная же суть моего вопроса как раз-таки в js... php используется как средство выкачки информации из БД. я более чем уверен, что опытный js-разработчик владеет php
<script>
function changeText0(){
var supertotal = 0;
var total = 0;
var prices = [];
var vals = [];
var totals = [];
var stotalsid= [];
var stotals= 0;
$('.stot').each(function(){
stotalsid.push (Number($(this).attr("id")));
});
for (var i=0; i<stotalsid.length; i++)
{
$('#trmain'+ i +' .tdprice').each(function(){
prices.push (Number($(this).attr("price")));
});
$('#trmain'+ i +' input').each(function(){
vals.push (Number($(this).val()));
});
for (var ii=0; ii<vals.length; ii++)
{
totals[ii] = vals[ii]*prices[ii];
$('#tot' +i +'-'+ ii).html( totals[ii] + ' руб.' );
stotals += totals[ii];
}
supertotal += stotals;
$('#stot'+ i).html( stotals + ' руб.' );
stotals= 0;
prices = [];
vals = [];
totals=[];
}
$('#supertotal').html( supertotal + ' руб.' );
};
</script>
|
я так понимаю, вы хотите оптимизировать свой код? вот вы сейчас мне дали js, а html где? вот, например, это: $('#stot'+ i) - что за id такой, откуда он берется.. я не экстрасенс.. выложите полностью свой html код (!!сгенерированный!!)
|
Вас понял. Выкладываю код. В каждом типе работ оставил по 2 наименования, дабы не выкладывать огромную простыню кода... Количество наименований в каждом типе работ соответственно может быть разным.
<div id="calculator" class="span4"><!-- START: Modules Anywhere -->
<form onsubmit="return false;" oninput="changeText0()">
<table border ='1' id='tablecalc' class="table table-bordered">
<thead>
<tr>
<th>Наименование</th>
<th>Цена</th>
<th>Количество</th>
<th>Сумма</th>
</tr>
</thead>
<tr id="trmain">
<td colspan="4">Работы по установке домофонов</td>
</tr>
<tr id="trmain0">
<td class="tdname" >Монтаж и подключение накладной вызывной панели</td>
<td class="tdprice" price='1500'>1500 руб.</td>
<td><input type='text'></td>
<td><output id='tot0-0'>0 руб.</output></td>
</tr>
<tr id="trmain0">
<td class="tdname" >Монтаж и подключение накладной вызывной панели</td>
<td class="tdprice" price='1500'>1500 руб.</td>
<td><input type='text'></td>
<td><output id='tot0-1'>0 руб.</output></td>
</tr>
<tr id="trmain">
<td>Итого:</td><td colspan="3"><output class="stot" id="stot0">0 руб.</output></td>
</tr>
<tr id="trmain">
<td colspan="4">Пуско-наладочные работы при установке домофонов</td>
</tr>
<tr id="trmain1">
<td class="tdname" >Программирование ключа для домофона</td>
<td class="tdprice" price='25'>25 руб.</td>
<td><input type='text'></td>
<td><output id='tot1-0'>0 руб.</output></td>
</tr>
<tr id="trmain1">
<td class="tdname" >Настройка функциональной группы до 3 органов</td>
<td class="tdprice" price='7500'>7500 руб.</td>
<td><input type='text'></td>
<td><output id='tot1-1'>0 руб.</output></td>
</tr>
<tr id="trmain">
<td>Итого:</td><td colspan="3"><output class="stot" id="stot1">0 руб.</output></td>
</tr>
<tr id="trmain">
<td colspan="4">Слаботочные работы при установке домофона</td>
</tr>
<tr id="trmain2">
<td class="tdname" >Монтаж пластиковой коробки на кабеле</td>
<td class="tdprice" price='1100'>1100 руб.</td>
<td><input type='text'></td>
<td><output id='tot2-0'>0 руб.</output></td>
</tr>
<tr id="trmain2">
<td class="tdname" >Монтаж пластикового короба (1 м)</td>
<td class="tdprice" price='25'>25 руб.</td>
<td><input type='text'></td>
<td><output id='tot2-1'>0 руб.</output></td>
</tr>
<tr id="trmain">
<td>Итого:</td><td colspan="3"><output class="stot" id="stot2">0 руб.</output></td>
</tr>
</table>
<output id="supertotal">0 руб.</output>
</form>
<script>
function changeText0(){
var supertotal = 0;
var total = 0;
var prices = [];
var vals = [];
var totals = [];
var stotalsid= [];
var stotals= 0;
$('.stot').each(function(){
stotalsid.push (Number($(this).attr("id")));
});
for (var i=0; i<stotalsid.length; i++)
{
$('#trmain'+ i +' .tdprice').each(function(){
prices.push (Number($(this).attr("price")));
});
$('#trmain'+ i +' input').each(function(){
vals.push (Number($(this).val()));
});
for (var ii=0; ii<vals.length; ii++)
{
totals[ii] = vals[ii]*prices[ii];
$('#tot' +i +'-'+ ii).html( totals[ii] + ' руб.' );
stotals += totals[ii];
}
supertotal += stotals;
$('#stot'+ i).html( stotals + ' руб.' );
stotals= 0;
prices = [];
vals = [];
totals=[];
}
$('#supertotal').html( supertotal + ' руб.' );
};
</script>
<!-- END: Modules Anywhere --></div>
|
Цитата:
Цитата:
книжки и мануалы в 100 раз полезнее Цитата:
тем, кто выбирает джумлу, надо делать по 4 сайта в день им некогда наводить красоту и другие джумловоды не будут уважать |
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<table border="1">
<tr>
<td width="200">работы</td>
<td width="100">цена</td>
<td width="100">кол-во</td>
<td width="150">сумма</td>
</tr>
<tr>
<td colspan="4" style="text-align: center;">тип 1</td>
</tr>
<tr>
<td width="200">Наименование ...</td>
<td width="100">1000 руб</td>
<td width="100" onclick="edit(this);">0</td>
<td width="150" class="group1">0</td>
</tr>
<tr>
<td width="200">Наименование ...</td>
<td width="100">1000 руб</td>
<td width="100" onclick="edit(this);">0</td>
<td width="150" class="group1">0</td>
</tr>
<tr>
<td colspan="3">Итого</td>
<td class="group1_total">0</td>
</tr>
<tr>
<td colspan="4" style="text-align: center;">тип 2</td>
</tr>
<tr>
<td width="200">Наименование ...</td>
<td width="100">1000 руб</td>
<td width="100" onclick="edit(this);">0</td>
<td width="150" class="group2">0</td>
</tr>
<tr>
<td width="200">Наименование ...</td>
<td width="100">1000 руб</td>
<td width="100" onclick="edit(this);">0</td>
<td width="150" class="group2">0</td>
</tr>
<tr>
<td colspan="3" class="group2_total">Итого</td>
<td>0</td>
</tr>
</table>
<script type="text/javascript" src="js/jquery-1.10.1.min.js"></script>
<script type="text/javascript">
function edit(ths)
{
$(ths).attr('onclick', '');
$(ths).html('<input class="edit" type="text" value="' + $(ths).html() + '">');
var edit = $('.edit');
$(edit).focus();
$(edit).on('blur', blurElit);
}
function blurElit()
{
var parent = $(this).parent();
var value = $(this).val();
var prev_val = parseInt($(parent).prev().html());
$(parent).html(value);
$(parent).attr('onclick', 'edit(this)');
$(parent).next().html((prev_val * value) + ' руб');
var clas = $(parent).next().attr('class');
var total = 0;
$('.' + clas).each(function(ind, val)
{
total += parseInt($(val).html());
});
$('.' + clas + '_total').html(total + ' руб');
}
</script>
</body>
</html>
|
mta88
Москва не сразу строилась. Спасибо за советы. |
skrudjmakdak,
спасибо добрый человек! буду разбираться... |
| Часовой пояс GMT +3, время: 11:00. |