Фига се! Убрал <th> из таблицы и заработало. странно как то
народ. помогите, ну правда, очень надо. |
Дело в том что для разметки шапки вы испольуете тег <th>, поэтому в массиве tr2 в нулевой позиции содержится его содержимое, в итоге поиск по тегу 'td' в tr2[0] дает провал, вот скрипт и не работает выкидывая ошибку. Это легко можно изменить если исправить начальное значение индекса i с 0 на 1.
var i = 1; Еще можете при выводе значения в поле (строчка): td2[3].innerHTML = value вызвать метод toFixed() у значения value (а то как то не красиво смотрится работа скрипта :/ ), тогда получится вот так: td2[3].innerHTML = value.toFixed(2); |
спасибо. попробую )
|
Сделал в итоге вот так.
<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> В итоге, каждый раз когда нажимаю на чекбокс происходит деление. А как сделать так чтобы по отжатию все возвращалось на прежние значения ? |
Сделал так
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 скриптом. |
Тогда нужно вешать событию деления не на onclick, а на onmousedown и сохранять исходные значения в какой нибудь массив или переменные, которые по событию onmouseup будут обратно записываться. Ну либо в Вашем сучае false или true.
|
я так и подумал, но все, опять же, упирается в знание javascript.
|
Заведите какой нибудь массив в функции, перед условиями на 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]; |
есть трабла. суть вот в чем.
я делаю checked. оно становится true, значения меняются. При unchek'е происходит новый вызов функции и ввод туда новых значений. в итоге ничего не получается. тут видимо нужен какой то иной метод вызова или еще что то |
что значит ничего не получается?
http://getfirebug.com/ |
Часовой пояс GMT +3, время: 09:19. |