Функция за смятане на полета в зависимост от чек бокс

Knoppix_

Registered
Здравейте,
имам следният код
Код:
<table>
<tr>
<td><input type=text id=tonaj name=tonaj></td>
<td><input type=text id=kilometri name=kilometri></td>
<td><input type=text id=norma name=norma></td>
<td><input type=text id=litri name=litri></td>
<td><input type=chekbox id=po_vlekach name=po_vlekach></td>
</tr>
Как мога да направя така че когато не е натиснат чекбокса нормата да се изчислява по следната формула
Код:
Норма = тонаж * 35 / 100 + 25
а когато е натиснат формулата да се променя на
Код:
Норма = тонаж * 35 / 100 + 20
 
Слагаш на checkbox-a една валута -> value='1', и когато е натиснат $_POST['checkbox'] ще връща 1, а ако НЕ е натиснат ще върне празен резултат .. и съответно кода ти е:

PHP:
if($_POST['po_vlekach'] == "1")
{
   // formula 1
}
else 
   {
     /// formula 2
   }

:?: :?: :?:
 
Да но така трябва да е с ревреш на страницата, а целата е да е без ревреш реално скрипта ми като джава скрипт е следният
Код:
$(document).ready(function(){
       $('#tonaj_1, #kilometri_1, #norma_1, #litri_1 #tonaj_2, #kilometri_2, #norma_2 #litri_2 ').keyup(function(){
        var tonaj_1 = $("#tonaj_1").val();
		var kilometri_1 = $("#kilometri_1").val();
		var norma_1 = parseFloat(tonaj_1)*35/100 + 25;
		$("input[name=norma_1]").val(norma_1);
		var litri_1 = parseFloat(kilometri_1) * parseFloat(norma_1)/100;
		$("input[name=litri_1]").val(litri_1);
    });
});
трябва ми формулата 
var norma_1 = parseFloat(tonaj_1)*35/100 + 25; да се променя ако е маркиран чекбокса
 
[js]


$(document).ready(function(){

if($('po_vlekach').is("checked"))
{
norma = parseFloat(tonaj_1)*35/100 + 25; да се променя ако е
}
else
{
norma = "formula 2";
}

document.write(norma);
[/js]

http://api.jquery.com/is/

:idea:
 
HTML:
<!doctype html>
<html>
	<head>
		<script src="http://code.jquery.com/jquery-1.8.3.js"></script>

		<script>

		function calculate(){
			
                        //определя числото във формулата, спрямо статуса на чекбокса
			if($('#po_vlekach').attr('checked') == 'checked'){
				var mod = 20;
			}else{
				var mod = 25;
			}

			var t = parseInt($('#tonaj').val());

                        //пресмята, само ако тонажа е число, по-голямо от нула
			if(t > 0){

				var norm = t*35/100 + mod;

				$('#norma').val(norm);
			}else{
                                //иначе премахва стойностите от полетата
                                //(полезно е, когато изтриеш ръчно стойността в tonaj)
				$('#tonaj, #norma').val('');
			}
		}

		$(function(){
                        //извиква функцията calculate при всяко кликване върху чекбокса
			$('#po_vlekach').change(calculate);
		
                        //извиква функцията calculate след всеки въведен знак в полето за тонаж
	                $('#tonaj').keyup(calculate);		
		});
		</script>
	</head>
	<body>
		
		<table>
			<tr>
				<td><input type=text id=tonaj name=tonaj></td>
				<td><input type=text id=kilometri name=kilometri></td>
				<td><input type=text id=norma name=norma></td>
				<td><input type=text id=litri name=litri></td>
				<td><input type=checkbox id=po_vlekach name=po_vlekach></td>
			</tr>
		</table>

	</body>
</html>
 
Така работи обаче на 1.9.2 не ми се получава ... може ли да ми го дадете за 1.9.2
 
Не съществува версия 1.9.2 на jQuery, има такава версия само за jQueryUI

За да работи с jQuery 1.9.1, промени

if($('#po_vlekach').attr('checked') == 'checked'){

да бъде:

if($('#po_vlekach').is(':checked')){

което всъщност би работило и със стари версии

Между другото, в твоя код, в първия пост имаш грешка в html кода, надявам се да не е така и в реалния ти код, изпуснал си второто "с" в checkbox

input type=checkbox
 
В случая jQueryUI няма връзка. За да ползваш jQueryUI, първо трябва да вклучиш и да използваш jQuery, виж неговата версия. Версиите, номерацията, на jQuery и на jQueryUI са различни. А пък jQueryUI е един вид допълнение към jQuery.

Редактирай кода, както ти показах в последния ми пост, би трябвало да работи. Ако не работи, покажи какви грешки дава в конзолата.
 
Странно е че дори и като го промених, пак не сработва иначе Jquery ми е 1.9.1

Ето го целият скрипт

Код:
$(document).ready(function(){
       $('#tonaj_1, #kilometri_1, #norma_1, #litri_1, #po_vlekach_1, #tonaj_2, #kilometri_2, #norma_2 #litri_2, #tonaj_3, #kilometri_3, #norma_3, #litri_3, #tonaj_4, #kilometri_4, #norma_4, #litri_4, #tonaj_5, #kilometri_5, #norma_5, #litri_5, #tonaj_6, #kilometri_6, #norma_6, #litri_6, #tonaj_7, #kilometri_7, #norma_7, #litri_7, #tonaj_8, #kilometri_8, #norma_8, #litri_8, #tonaj_9, #kilometri_9, #norma_9, #litri_9, #tonaj_10, #kilometri_10, #norma_10, #litri_10, #tonaj_11, #kilometri_11, #norma_11, #litri_11, #tonaj_12, #kilometri_12, #norma_12, #litri_12, #tonaj_13, #norma_13, #kilometri_13, #litri_13, #tonaj_14, #kilometri_14, #norma_14, #litri_14, #tonaj_15, #kilometri_15, #norma_15, #litri_15, #tonaj_16, #norma_16, #kilometri_16, #litri_16, #tonaj_17, #kilometri_17, #norma_17, #litri_17, #tonaj_18, #kilometri_18, #litri_18').keyup(function(){
        var tonaj_1 = $("#tonaj_1").val();
		var kilometri_1 = $("#kilometri_1").val();
		var norma_1 = parseFloat(tonaj_1)*35/100 + 25;
		$("input[name=norma_1]").val(norma_1);
		var litri_1 = parseFloat(kilometri_1) * parseFloat(norma_1)/100;
		$("input[name=litri_1]").val(litri_1);
		var tonaj_2 = $("#tonaj_2").val();
		var kilometri_2 = $("#kilometri_2").val();
		var norma_2 = parseFloat(tonaj_2)*35/100 + 25;
		$("input[name=norma_2]").val(norma_2);
		var litri_2 = parseFloat(kilometri_2) * parseFloat(norma_2)/100;
		$("input[name=litri_2]").val(litri_2);
		var tonaj_3 = $("#tonaj_3").val();
		var kilometri_3 = $("#kilometri_3").val();
		var norma_3 = parseFloat(tonaj_3)*35/100 + 25;
		$("input[name=norma_3]").val(norma_3)
		var litri_3 = parseFloat(kilometri_3) *parseFloat(norma_3)/100;
		$("input[name=litri_3]").val(litri_3);
		var tonaj_4 = $("#tonaj_4").val();
		var kilometri_4 = $("#kilometri_4").val();
		var norma_4 = parseFloat(tonaj_4)*35/100 + 25;
		$("input[name=norma_4]").val(norma_4);
		var litri_4 = parseFloat(kilometri_4)*parseFloat(norma_4)/100;
		$("input[name=litri_4]").val(litri_4);
		var tonaj_5 = $("#tonaj_5").val();
		var kilometri_5 = $("#kilometri_5").val();
		var norma_5 = parseFloat(tonaj_5)*35/100 + 25;
		$("input[name=norma_5]").val(norma_5);
		var litri_5 = parseFloat(kilometri_5)*parseFloat(norma_5)/100;
		$("input[name=litri_5]").val(litri_5);
		var tonaj_6 = $("#tonaj_6").val();
		var kilometri_6 = $("#kilometri_6").val();
		var norma_6 = parseFloat(tonaj_6)*35/100+25;
		$("input[name=norma_6]").val(norma_6);
		var litri_6 = parseFloat(kilometri_6)*parseFloat(norma_6)/100;
		$("input[name=litri_6]").val(litri_6);
		var tonaj_7 = $("#tonaj_7").val();
		var kilometri_7 = $("#kilometri_7").val();
		var norma_7 = parseFloat(tonaj_7)*35/100+25;
		$("input[name=norma_7]").val(norma_7);
		var litri_7 =parseFloat(kilometri_7)*parseFloat(norma_7)/100;
		$("input[name=litri_7]").val(litri_7);	
		var tonaj_8 = $("#tonaj_8").val();
		var kilometri_8 = $("#kilometri_8").val();
		var norma_8 = parseFloat(tonaj_8)*35/100+25;
		$("input[name=norma_8]").val();
		var litri_8 = parseFloat(kilometri_8)*parseFloat(norma_8)/100;
		$("input[name=litri_8]").val(litri_8);
		var tonaj_9 = $("#tonaj_9").val();
		var kilometri_9 = $("#kilometri_9").val();
		var norma_9 = parseFloat(tonaj_9)*35/100+25;
		$("input[name=norma_9]").val(norma_9);
		var litri_9 = parseFloat(kilometri_9)*parseFloat(norma_9)/100;
		$("input[name=litri_9]").val(litri_9);
		var tonaj_10 = $("#tonaj_10").val();
		var kilometri_10 = $("#kilometri_10").val();
		var norma_10 = parseFloat(tonaj_10)*35/100+25;
		$("input[name=norma_10]").val(norma_10);
		var litri_10 = parseFloat(kilometri_10)*parseFloat(norma_10)/100;
		$("input[name=litri_10]").val(litri_10);
		var tonaj_11 = $("#tonaj_11").val();
		var kilometri_11 = $("#kilometri_11").val();
		var norma_11 = parseFloat(tonaj_11)*35/100 + 25;
		$("input[name=norma_11]").val(norma_11);
		var litri_11 = parseFloat(kilometri_11)*parseFloat(norma_11)/100;
		$("input[name=litri_11]").val(litri_11);
		var tonaj_12 = $("#tonaj_12").val();
		var kilometri_12 = $("#kilometri_12").val();
		var norma_12 = parseFloat(tonaj_12)*35/100 +25;
		$("input[name=norma_12]").val(norma_12);
		var litri_12 = parseFloat(kilometri_12)*parseFloat(norma_12)/100;
		$("input[name=litri_12]").val(litri_12);
		var tonaj_13 = $("#tonaj_13").val();
		var kilometri_13 = $("#kilometri_13").val();
		var norma_13 = parseFloat(tonaj_13)*35/100 + 25;
		$("input[name=norma_13]").val(norma_13);
		var litri_13 = parseFloat(kilometri_13)*parseFloat(norma_13)/100;
		$("input[name=litri_13]").val(litri_13);
		var tonaj_14 = $("#tonaj_14").val();
		var kilometri_14 = $("#kilometri_14").val();
		var norma_14 = parseFloat(tonaj_14)*35/100 + 25;
		$("input[name=norma_14]").val(norma_14);
		var litri_14 = parseFloat(kilometri_14)*parseFloat(norma_14)/100;
		$("input[name=litri_14]").val(litri_14);
		var tonaj_15 = $("#tonaj_15").val();
		var kilometri_15 = $("#kilometri_15").val();
		var norma_15 = parseFloat(tonaj_15)*35/100 + 25;
		$("input[name=norma_15]").val(norma_15);
		var litri_15 = parseFloat(kilometri_15)*parseFloat(norma_15)/100;
		$("input[name=litri_15]").val(litri_15);
		var tonaj_16 = $("#tonaj_16").val();
		var kilometri_16 = $("#kilometri_16").val();
		var norma_16 = parseFloat(tonaj_16)*35/100 + 25;
		$("input[name=norma_16]").val(norma_16);
		var litri_16 = parseFloat(kilometri_16)*parseFloat(norma_16)/100;
		$("input[name=litri_16]").val(litri_16);
		var tonaj_17 = $("#tonaj_17").val();
		var kilometri_17 = $("#kilometri_17").val();
		var norma_17 = parseFloat(tonaj_17)*35/100 + 25;
		$("input[name=norma_17]").val(norma_17);
		var litri_17 = parseFloat(kilometri_17)*parseFloat(norma_17)/100;
		$("input[name=litri_17]").val(litri_17);
		var tonaj_18 = $("#tonaj_18").val();
		var kilometri_18 = $("#kilometri_18").val();
		var norma_18 = parseFloat(tonaj_18)*35/100 + 25;
		$("input[name=norma_18]").val(norma_18);
		var litri_18 = parseFloat(kilometri_18)*parseFloat(norma_18)/100;
		$("input[name=litri_18]").val(litri_18);
		var sum_izminati_kilometri = parseFloat(kilometri_1) + parseFloat(kilometri_2) + parseFloat(kilometri_3) + parseFloat(kilometri_4)
		+ parseFloat(kilometri_5) + parseFloat(kilometri_6) + parseFloat(kilometri_7) + parseFloat(kilometri_8) + parseFloat(kilometri_9)
		+ parseFloat(kilometri_10) + parseFloat(kilometri_11) + parseFloat(kilometri_12) + parseFloat(kilometri_13) + parseFloat(kilometri_14) + parseFloat(kilometri_15) + parseFloat(kilometri_16) + parseFloat(kilometri_17) + parseFloat(kilometri_18);
		$("input[name=sum_izminati_kilometri]").val(sum_izminati_kilometri);
		
			
    });
});

 function calculate(){
 
                        //определя числото във формулата, спрямо статуса на чекбокса
                        if($('#po_vlekach_1').is(':checked')) {
                                var mod = 20;
                        }else{
                                var mod = 25;
                        }

                        var tonaj_1 = parseInt($('#tonaj_1').val());

                        //пресмята, само ако тонажа е число, по-голямо от нула
                        if(t > 0){

                                var norm = tonaj_1*35/100 + mod;

                                $('#norma_1').val(norm);
                        }else{
                                //иначе премахва стойностите от полетата
                                //(полезно е, когато изтриеш ръчно стойността в tonaj)
                                $('#tonaj_1, #norma_1').val('');
                        }
                }

                $(function(){
                        //извиква функцията calculate при всяко кликване върху чекбокса
                        $('#po_vlekach_1').change(calculate);
                
                        //извиква функцията calculate след всеки въведен знак в полето за тонаж
                        $('#tonaj_1').keyup(calculate);           
                });
 
Не можеш да ползваш едновременно твоя и моя код, защото правят едно и също и си пречат. Ще ми трябва известно време да преработя твоята част, защото да смяташ всеки ред така по отделно, не е правилно.
 
Добре де как трябва да преработя моят код само ми дай някакъв пример аз ще си го оправя, много ти благодаря за помоща ;)
 
Обърни малко повече внимание на jQuery селекторите и няма да ти се налага да пишеш толкова много, а пък ако в бъдеще трябва да променяш нещо, ще го променяш само на едно място, а не на 18 места, както е при теб.
http://api.jquery.com/category/selectors/

Позволих си да променя нещо, което не знам дали си го предвидил и дали съществува в бизнеса на твоя клиент, но съм имал подобни задания и там трябваше да се смятат и пазните курсове, което в твоя вариант предполагам, че е случая, когато тонаж е равно на нула. Ако няма дори теоретична вероятност да имаш празен курс, лесно ще се справиш с една if/else контролна структура.

работи с jQuery 1.9.1

използвам формуляр с три реда за повече пригледност

Нормата е величина, която се изчислява. Сигурен ли си, че изчисленията трябва да се повтарят в случай на ръчна промяна на нормата?

Код:
<!doctype html>
<html>
	<head>
		<meta charset="utf-8">
		<script src="http://code.jquery.com/jquery-1.9.1.js"></script>

		<script>

		function calculate(){
			
			//get the current row scope
			//контекста за конкретния маршрут
			var row = $(this).parents('tr');

			//определяме променливата за формулата с разходната норма
			if($('[id^="po_vlekach_"]', row).is(':checked')){
				var mod = 20;
			}else{
				var mod = 25;
			}

			//взимаме тонажа
			var t = parseFloat($('[id^="tonaj_"]', row).val());

			//тонажа е възможно да бъде нула - при празен курс
			if(isNaN(t)) t = 0; 

			//изчисляваме и показваме на разходната норма
			$('[id^="norma_"]', row).val(t*35/100 + mod);

			//изчисляваме разхода
			if($('[id^=kilometri_]', row).val() != ''){
				$('[id^="litri_"]', row).val(
					parseFloat($('[id^=kilometri_]', row).val()) * parseFloat($('[id^="norma_"]', row).val())/100
				);
			}

			//изчисляваме изминатите километри за целия формуляр (не използваме row)
			var sum_izminati_kilometri = 0;

			$('[id^="kilometri_"]').each(function(){
				if(this.value != ''){
					sum_izminati_kilometri += parseFloat(this.value);
				}
			});

			//показваме сумата на изминатите километри
			$('#sum_izminati_kilometri').val(sum_izminati_kilometri);

		}

		$(function(){
			$('[id^="tonaj_"], [id^="kilometri_"], [id^="norma_"], [id^="litri_"]').keyup(calculate);
			$('[id^="po_vlekach_"]').change(calculate);
		});
		</script>
	</head>
	<body>
		
		<table>
			<tr>
				<td>Тонаж</td>
				<td>Пробег</td>
				<td>Норма</td>
				<td>Разход</td>
				<td>Влекач</td>
			</tr>
			<tr>
				<td><input type=text id="tonaj_1" name="tonaj_1"></td>
				<td><input type=text id="kilometri_1" name="kilometri_1"></td>
				<td><input type=text id="norma_1" name="norma_1"></td>
				<td><input type=text id="litri_1" name="litri_1"></td>
				<td><input type=checkbox id="po_vlekach_1" name="po_vlekach_1"></td>
			</tr>

			<tr>
				<td><input type=text id="tonaj_2" name="tonaj_2"></td>
				<td><input type=text id="kilometri_2" name="kilometri_2"></td>
				<td><input type=text id="norma_2" name="norma_2"></td>
				<td><input type=text id="litri_2" name="litri_2"></td>
				<td><input type=checkbox id="po_vlekach_2" name="po_vlekach_2"></td>
			</tr>

			<tr>
				<td><input type=text id="tonaj_3" name="tonaj_3"></td>
				<td><input type=text id="kilometri_3" name="kilometri_3"></td>
				<td><input type=text id="norma_3" name="norma_3"></td>
				<td><input type=text id="litri_3" name="litri_3"></td>
				<td><input type=checkbox id="po_vlekach_3" name="po_vlekach_3"></td>
			</tr>

			<tr>
				<td align="right">Изминати километри:</td>
				<td><input type="text" name="sum_izminati_kilometri" id="sum_izminati_kilometri"></td>
				<td colspan="3"> </td>
		</table>

	</body>
</html>
 
С тея смятания само да кажа ,че не е удачно да се правят в js защото всеки може да го манилпулира!
 

Back
Горе