Фига се! Убрал <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, время: 12:29. |