Как побороть BUG?
Здраствуйте. Есть таблица. В какой-то момент времени все ее содержимое изменяеться через innerHTML. Тоисть я передаю такое значение:
<tr onclick='Go(this)'> <td>some data</td><td>some data2</td> </tr> ............. <tr onclick='Go(this)'> <td>some data150</td><td>some data200</td> </tr> Сама функция Go :
function Go(asder)
{
alert(asder.rowIndex);
}
Тоисть процедура показывает на какую строку мы нажали. В Firefox и Opera все работает коректо, а вот в Chrome и IE показывает -1. Покопался в нете. Нашел вот : http://connect.microsoft.com/IE/feed...dbackID=371923 Вообщем БАГ. И будет исправлен только в 8 версии IE. Там пишут что такое происходит когда єлементы не присоеденны к document нормально. :) Как можна изменить содержимое таблицы НОРМАЛЬНО? Какие еще есть варианты узнать на какую строку нажал пользователь? |
А на ячейку если поставить обработчик?
|
Мне надо именно на строку.
|
не знаю, как вы меняете все содержимое таблицы
table.innerHTML = '<tr>...</tr>...<tr>...</tr>' у меня не работает, да и не стоит так делать пожалуй я написал table.outerHTML = '<table>...</table>' и у меня все корректно работает (в IE 7) и тот баг-репорт с вашей проблемой не связан |
gcolor,
Сорри, сначала не понял в чем проблема. Нормально работать с таблицей нужно используя методы insertRow и insertCell, innerHTML для таблиц использовать нельзя. |
но outerHTML можно
|
outerHTML работает только в ИЕ.
|
Так суть в том что я использую innerHTML и все у меня работает отлично только вот rowIndex глючит (в тех браузерах что я указал). Вставка происходит корректно, все что между <table></table> заменяеться на то что мне нужно. (Смотрел через Firebug). Использовать insertRow и другое не могу в силу специфики движка который пишу.
|
про IE: innerHTML is read/write for all objects except the following, for which it is read-only: COL, COLGROUP, FRAMESET, HEAD, HTML, STYLE, TABLE, TBODY, TFOOT, THEAD, TITLE, TR.
другими словами innerHTML для записи в table использоваться нельзя Цитата:
Цитата:
|
В Firefox и Opera все работает коректно. Не работает в Chrome и IE.
Используеться AJAX. Клиент получает xml файл, где прописано какой єлемент ID надо изменить, и значение для изменения. Вот кусок функции
function ShowData(){ // розбираємо відповідь сервера
for (i=0; i < xmlDOC.getElementsByTagName('response').length; i++){
//-- получаємо значення CSS для об"єкта;
var changeCSS=xmlDOC.getElementsByTagName("css")[i].childNodes[i].nodeValue;
//-- получаємо ID яке потрібно змінити
var changeID=xmlDOC.getElementsByTagName('changeid')[i].childNodes[i].nodeValue;
//-- получаємо значення що потрібно зробити
var methodID=xmlDOC.getElementsByTagName('methodid')[i].childNodes[i].nodeValue;
//-- получаємо контент
var content=xmlDOC.getElementsByTagName("maindata")[i].childNodes[i].nodeValue;
}
$(changeID).innerHTML=content;
//--- прикручуємо скрипти
var scripts = $(changeID).getElementsByTagName('script');
if (scripts.length > 0) {
var l = 0;
for (var i=0; i < scripts.length - l; i++) {
if (scripts[i].src) {
var newScr = document.createElement('script');
newScr.src = scripts[i].src;
$(changeID).appendChild(newScr);
l++;
} else {
var newScr = document.createElement('script');
newScr.text = scripts[i].text;
$(changeID).appendChild(newScr);
l++;
}
}
}
|
| Часовой пояс GMT +3, время: 06:42. |