Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Замена значений ячеек таблицы. (https://javascript.ru/forum/events/2692-zamena-znachenijj-yacheek-tablicy.html)

madgals 02.02.2009 15:43

Фига се! Убрал <th> из таблицы и заработало. странно как то
народ. помогите, ну правда, очень надо.

Zibba 02.02.2009 17:05

Дело в том что для разметки шапки вы испольуете тег <th>, поэтому в массиве tr2 в нулевой позиции содержится его содержимое, в итоге поиск по тегу 'td' в tr2[0] дает провал, вот скрипт и не работает выкидывая ошибку. Это легко можно изменить если исправить начальное значение индекса i с 0 на 1.
var i = 1;


Еще можете при выводе значения в поле (строчка):
td2[3].innerHTML = value

вызвать метод toFixed() у значения value (а то как то не красиво смотрится работа скрипта :/ ), тогда получится вот так:
td2[3].innerHTML = value.toFixed(2);

madgals 02.02.2009 17:17

спасибо. попробую )

madgals 03.02.2009 11:29

Сделал в итоге вот так.
<script type="text/javascript">
function zamena(){
	var kurs = document.getElementById('kurs').innerHTML;
	var tr = document.getElementById('color').getElementsByTagName('tr');
    var i = 1;                
    while(i < tr.length){
        var td = tr[i].getElementsByTagName('td');
        var value = parseFloat(td[3].innerHTML) / parseFloat(kurs);
        td[3].innerHTML = value.toFixed(2);
        i++;
    }
}
</script>

<table><tr> 
				<td align="center" nowrap valign="middle"><input name="in_rub" type="checkbox" id="in_rub" onclick="zamena()" /></td> 
				<td align="center" nowrap valign="middle">Показать цену в у.е.</td> 
		</tr></table>

В итоге, каждый раз когда нажимаю на чекбокс происходит деление.
А как сделать так чтобы по отжатию все возвращалось на прежние значения ?

madgals 03.02.2009 12:16

Сделал так
function zamena(){
	var kurs = document.getElementById('kurs').innerHTML;
	var tr = document.getElementById('color').getElementsByTagName('tr');
    var i = 1;
	if (document.getElementById("in_rub").checked==true) {
    	while(i < tr.length){
        	var td = tr[i].getElementsByTagName('td');
        	var value = parseFloat(td[3].innerHTML) / parseFloat(kurs);
        	td[3].innerHTML = value.toFixed(2);
        	i++;
    	}
	}
	if (document.getElementById("in_rub").checked==false) {
    	while(i < tr.length){
        	var td = tr[i].getElementsByTagName('td');
        	var value = parseFloat(td[3].innerHTML) * parseFloat(kurs);
        	td[3].innerHTML = value.toFixed(2);
        	i++;
    	}
	}
}

Но вероятнее всего, что это неправильно. Потому что сотые доли в итоге меняются при обратном преобразовании.

Может быть еще как то можно решить эту же задачу ?
сама таблица с данными формируется php скриптом.

Zibba 03.02.2009 13:48

Тогда нужно вешать событию деления не на onclick, а на onmousedown и сохранять исходные значения в какой нибудь массив или переменные, которые по событию onmouseup будут обратно записываться. Ну либо в Вашем сучае false или true.

madgals 03.02.2009 14:09

я так и подумал, но все, опять же, упирается в знание javascript.

Zibba 03.02.2009 14:27

Заведите какой нибудь массив в функции, перед условиями на true и false. и в Цикле:
var old[];
while(i < tr.length){
    // запишите в него значения из ячеек таблицы
    var td = tr[i].getElementsByTagName('td');
    old[i] = td[3].innerHTML;
    i++;
}
/* теперь у Вас в массиве old сохранены значения ячеек с исходными
 значениями и теперь можно в дальнейшем для вычисления значений
 использовать его.

 например так
*/
if (document.getElementById("in_rub").checked==true) {
    i = 1;
    while(i < tr.length){
        var td = tr[i].getElementsByTagName('td');
        var value = parseFloat(old[i]) / parseFloat(kurs);
        td[3].innerHTML = value.toFixed(2);
        i++;
    }
}
/* а обратное преобразование и того будет проще, просто в цикле без
 всяких вычислений, записывайте в нужную клетку созраненное ранее
 значение. Вот таким образом
*/
td[3].innerHTML = old[i];

madgals 03.02.2009 17:20

есть трабла. суть вот в чем.
я делаю checked. оно становится true, значения меняются.
При unchek'е происходит новый вызов функции и ввод туда новых значений. в итоге ничего не получается.

тут видимо нужен какой то иной метод вызова или еще что то

x-yuri 03.02.2009 17:33

что значит ничего не получается?
http://getfirebug.com/


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