Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Объединение подобных функций (https://javascript.ru/forum/dom-window/7797-obedinenie-podobnykh-funkcijj.html)

mrMAG 19.02.2010 19:17

Объединение подобных функций
 
Здравствуйте все!!!
И сразу к делу:

Имеется таблица, каждая строка в которой реализованная следующим образом:
<tr> 
        <td class="kolonka_1"><a href="#" onclick="delete_tr(this)"><img src="img/del.gif" alt="Удалить строку"></a></td> 
        <td class="kolonka_2">Торт</td>
	    <td class="kolonka_3"> <input name="k_3_1" type="num" value="0" onchange="rez(); return true;"> </td>
	    <td class="kolonka_4"> <input name="k_4_1" type="num" value="0" onchange="rez(); return true;"> </td>		
	    <td class="kolonka_5">
					<select>
						<option></option>
						<option> шт. </option>
						<option> кг. </option>
						<option> чел. </option>
						<option> час. </option>
					</select>
		</td>
		<td class="kolonka_6"> <input type="num" name="k_6_1"  value="0"> </td>
	    <td class="kolonka_7"> <input type="num" name="k_7_1"  value="0"> </td>
		<td class="kolonka_8"> <input type="num" name="k_8_1"  value="0"> </td>
    </tr>


Функция rez() представляет собой следующее:
function rez() {
var val1 = parseInt(document.kalk.k_3_1.value);
var val2 = parseInt(document.kalk.k_4_1.value);
var val3 = val1 * val2;
document.kalk.k_6_1.value = val3;
}


И все вроде бы хорошо и все вроде считает, НО...
Вот это большое "но" заключается в том что строк в таблице 118 и, в принципе, можно написать 118 функций с разными именами, но это реально извращение.

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

Gvozd 19.02.2010 21:46

<tr> 
        <td class="kolonka_1"><a href="#" onclick="delete_tr(this)"><img src="img/del.gif" alt="Удалить строку"></a></td> 
        <td class="kolonka_2">Торт</td>
	    <td class="kolonka_3"> <input name="k_3_1" type="num" value="0" onchange="rez(1); return true;"> </td>
	    <td class="kolonka_4"> <input name="k_4_1" type="num" value="0" onchange="rez(1); return true;"> </td>		
	    <td class="kolonka_5">
					<select>
						<option></option>
						<option> шт. </option>
						<option> кг. </option>
						<option> чел. </option>
						<option> час. </option>
					</select>
		</td>
		<td class="kolonka_6"> <input type="num" name="k_6_1"  value="0"> </td>
	    <td class="kolonka_7"> <input type="num" name="k_7_1"  value="0"> </td>
		<td class="kolonka_8"> <input type="num" name="k_8_1"  value="0"> </td>
    </tr>


function rez(i) {

var val1 = parseInt(document.getElementsByName('kalk')[0].getElementsByName('k_3_'+i)[0].value);
var val2 = parseInt(document.getElementsByName('kalk')[0].getElementsByName('k_4_'+i)[0].value);
var val3 = val1 * val2;
document.getElementsByName('kalk')[0].getElementsByName('k_6_'+i)[0].value = val3;
}

решение весьма топорное
по-хорошему делу, надо бы передавать через this указатель на текущий объект, но можно и так

mrMAG 20.02.2010 11:39

Попробовал...
выдает ошибку "объект не поддерживает это свойство или метод"
что делать???:cray:

Gvozd 20.02.2010 13:53

function rez(i) {
var val1 = parseInt(document.kalk['k_3_'+i].value);
var val2 = parseInt(document.kalk['k_4_'+i].value);
var val3 = val1 * val2;
document.kalk['k_6_'+i].value = val3;
}

mrMAG 20.02.2010 15:35

Спасибо, теперь все работает как нужно :thanks:


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