Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> setAttribute в IE6. 
:(
    Опции темы
diam
Дата 1.6.2005, 08:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 348
Регистрация: 23.1.2005
Где: Екатеринбург

Репутация: 6
Всего: 16



Добрый день! (утро, вечер, ночь).

При написании адресной книги столкнулся с проблемой - IE не устанавливает у строки атрибут ID. То есть, не ругается, не выдаёт ошибок - просто не устанавливает.
Вот код:
Код

// search - id таблицы
var tablesearch = document.getElementById("search");

var tr;
if (document.all ) tr = document.createElement("TR");
else tr = tablesearch.insertRow(tablesearch.rows.length);

tr.setAttribute("id", "trlastcr");

if ( document.all )
    tablesearch.appendChild(tr.appendChild(document.createElement("TD").appendChild(document.createTextNode("Текст в ячейке"))));
else
    tr.insertCell(tr.cells.length).appendChild(document.createTextNode("Текст в ячейке"));


То есть, он добавляет строку, добавляет ячейку - а атрибут "id" устанавливать не хочет.

Где грабли?
PM MAIL   Вверх
Black
Дата 1.6.2005, 08:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Web-Development
**


Профиль
Группа: Участник
Сообщений: 980
Регистрация: 15.8.2004

Репутация: 4
Всего: 45



А так:

Код

// search - id таблицы
var tablesearch = document.getElementById("search");
var tr;
if (document.all ) tr = document.createElement("TR");
else tr = tablesearch.insertRow(tablesearch.rows.length);
tr.id = "trlastcr";

if ( document.all )
    tablesearch.appendChild(tr.appendChild(document.createElement("TD").appendChild(document.createTextNode("Текст в ячейке"))));
else
    tr.insertCell(tr.cells.length).appendChild(document.createTextNode("Текст в ячейке"));


В данном случае можно обойтись без setAttribute.


--------------------
Могу все, но ничего не умею :-)
PM WWW   Вверх
diam
Дата 1.6.2005, 08:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 348
Регистрация: 23.1.2005
Где: Екатеринбург

Репутация: 6
Всего: 16



PHP-DIRECTOR, нет, не работает.
Если потом попробовать
Код

alert(document.getElementById("trlastcr");

IE выведет null.
PM MAIL   Вверх
Black
Дата 1.6.2005, 09:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Web-Development
**


Профиль
Группа: Участник
Сообщений: 980
Регистрация: 15.8.2004

Репутация: 4
Всего: 45



diam
ну дык я не знаю как вы там делаете, но это дело надо вешать на событие onload, т.е. так:

Код

<html>
<head>
<script>
function cool(){
// search - id таблицы
var tablesearch = document.getElementById("search");
var tr;
if (document.all ) tr = document.createElement("TR");
else tr = tablesearch.insertRow(tablesearch.rows.length);
tr.id = "trlastcr";
if ( document.all )
    tablesearch.appendChild(tr.appendChild(document.createElement("TD").appendChild(document.createTextNode("Текст в ячейке"))));
else
    tr.insertCell(tr.cells.length).appendChild(document.createTextNode("Текст в ячейке"));
}
</script>
</head>

<body onload='cool()'>
ля-ля я нашел в саду кота
</body>
</html>


Поэтому и выводит нулл так как объекты еще не созданы, а мы уже к ним обращаемся :-) а вот после загрузки их создадут и тогда ОК.


Это сообщение отредактировал(а) PHP-DIRECTOR - 1.6.2005, 09:03


--------------------
Могу все, но ничего не умею :-)
PM WWW   Вверх
diam
Дата 1.6.2005, 09:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 348
Регистрация: 23.1.2005
Где: Екатеринбург

Репутация: 6
Всего: 16



Хорошо.
Приведу полный код.
Код

<html>
<head>
<meta http-equiv="Content-Script-Type" content="text/javascript">
<script>
function f2 () {
  var tablesearch = document.getElementById("search");
  var tr;
  if ( document.all ) {
    tr = document.createElement("TR");
    tr.id = "trlastcr";     tablesearch.appendChild(tr.appendChild(document.createElement("TD").appendChild(document.createTextNode("Текст в ячейке"))));
  }
  else {
    tr = tablesearch.insertRow(tablesearch.rows.length);
    tr.setAttribute('id', 'trlastcr');
    tr.insertCell(tr.cells.length).appendChild(document.createTextNode("Текст в ячейке"));
  }
}
</script>
</head>
<body onLoad='f2(); alert(document.getElementById("trlastcr"));'>
<table id="tablesearch"></table>
<!--
После загрузки этого документа во всех браузерах, кроме ие, мы увидим что-то вроде
object htmlTableRowElement
Но только не в IE.
-->
</body>
</html>

Поэтому, php-director, теория интересна - но не верна. Ех...
PM MAIL   Вверх
Aliance
Дата 1.6.2005, 13:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 55
Всего: 137



diam
поидеи, алертить нужно после исполнения кода. Используй задержку - setTimeout()
PM MAIL WWW ICQ Skype   Вверх
diam
Дата 1.6.2005, 13:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 348
Регистрация: 23.1.2005
Где: Екатеринбург

Репутация: 6
Всего: 16



Aliance, alert - просто что-бы показать, что не работает setAttribute на элементах TR (возможно, не только TR) в IE. Можно проверить не только alert'ом, но и другими способами.
JavaScript - скриптовый язык изначально, имплементируется как последовательность комманд. Поэтому на результат кода можно посмотреть сразу за его исполнением. Во всех остальных браузерах, кроме IE, работает отлично.
PM MAIL   Вверх
diam
Дата 1.6.2005, 15:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 348
Регистрация: 23.1.2005
Где: Екатеринбург

Репутация: 6
Всего: 16



А теперь самое смешное.
Если сделать так:
Код

<table><tr id="trx2"><td>Пробная ячейка в строке trx2</td></tr></table>
<script>
var trx = document.createElementById("trx2");
trx.setAttribute("id", "newtrx");
alert(trx.getAttribute("id"));
</script>

На экран радостно выскочит newtrx. То есть, если в IE и в Опере (блин, в ней тоже надо) ввести строку заранее и прописать в ней id="xxx" (тоже заранее), то потом это значение можно изменять!!!


 ! 
 
Весь оффтоп вырезан.


Это сообщение отредактировал(а) Aliance - 1.6.2005, 18:38
PM MAIL   Вверх
Sardar
Дата 1.6.2005, 19:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 78
Всего: 317



diam зачем выделять ИЕ, зачем скармливать ему DOM, вместo HTML DOM1... ? И вообще убери кучу ошибок в именах и идентификаторах smile

Код
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<head>
<script type="text/javascript">
function f2 () {
  var tablesearch = document.getElementById("tablesearch");
  
  var tr = tablesearch.insertRow(tablesearch.rows.length);
  tr.setAttribute("id", "trlastcr");
  tr.insertCell(tr.cells.length).appendChild(document.createTextNode("Текст в ячейке"));
}
</script>
</head>
<body onLoad='f2(); alert(document.getElementById("trlastcr"));'>
<table id="tablesearch"></table>
<!--
После загрузки этого документа во всех браузерах, кроме ие, мы увидим что-то вроде
object htmlTableRowElement
Но только не в IE. (и вот тут мы ошиблись =) )
-->
</body>
</html>



--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0557 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.