пятница, февраля 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 комментариев:

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

    ОтветитьУдалить
  2. Я пробовал. Переписал цикл как:

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

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

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

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

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

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

    ОтветитьУдалить