пятница, февраля 26, 2010

Энциклопедия Invalid Explorer: кто бы мне объяснил природу такого явления...

...Есть страница, на ней 10 одинаковых объектов с id btn1, btn2, ... btn10.

Есть привязка к ним обработчика события в цикле:

for (x=1; x<11; x++){ new нечто ('btn'+x); }

Во всех браузерах работает. В Эксплорере тоже. Кроме объекта с id btn10. Переставил этот id на другой объект — перестал работать тот объект.

Переписал на:

for (x=1; x<12; x++)

и убрал 10-й id из объектов вообще, сделал его 11-м: id='btn11'. Так — заработало. Сижу теперь и думаю: видимо, чего-то я не догоняю в Джаваскрипте? А может, не я? Почему операция 'строка'+10 в понимании Эксплорера не даёт результата 'строка10'?

5 комментариев:

Степаныч комментирует...

Скорее всего идёт какое-то преобразование. Может явно число приводить к строке перед конкатенацией?

Сергей комментирует...

Я пробовал. Переписал цикл как:

var s='';
for (x=1; x<11; x++) {
s=''+x;
new blahblah ('btn'+s);
}

...однофигственно.

И объекта с таким же id на странице тоже нет, искал.

Сергей комментирует...

Конкатенация строки с 10 даёт с эксплорере строка10 (естественно), проверил. Косяк где-то в DOM. Или, не исключено, косяк в rollover.js - этот скрипт прицепляет событие. Разбирать некогда. Но озадачивает, что проявляется только в Эксплорере. Пробовал ФФ, Оперу, Эпифани, Хром.

Степаныч комментирует...

Может в DOM два элемента с идентификатором btn10 ?

Сергей комментирует...

См. выше: И объекта с таким же id на странице тоже нет, искал.

Поиск по этому блогу