Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Вебмастеру (http://forum.oszone.net/forumdisplay.php?f=22)
-   -   [решено] getElementById на ИЕ (http://forum.oszone.net/showthread.php?t=167442)

Surround 15-02-2010 17:35 1347746

getElementById на ИЕ
 
Вложений: 1
  • test.zip (840 bytes, скачиваний: 15)
Добрый!
Долго сегодня думал над проблемой, возникшей в приложенном файле. При вводе в текстовое поле в div подгружается автозаполнение (аля яндекс). В опере все работает. Проблема в том, что IE при вводе данных в поле (то есть вызове события обработки нажатия клавиш), пишет, что "Предполагается наличие объекта". Почитал, что ИЕ некорректно работает функция getElementById, через которую я пытаюсь обратиться к слою.
как можно сделать этот вариант рабочим и в ИЕ?

Coutty 15-02-2010 17:43 1347756

Надо сказать, что и в Опере оно не работает. Вы забыли приложить файл, который указан в этой строке:
Код:

<script type="text/javascript" src="script.js"></script>
Впрочем, это неважно. Если заменить функцию из того файла на alert(), то всё так, как вы описываете. В IE не работает из-за того, что в строке пропущена запятая:
Код:

        var systemKeys = [13, 37, 38, 39, 40];
Посмотрите внимательно - между 39 и 40 надо поставить. После этого и в IE работает.

Surround 15-02-2010 21:15 1347967

Вложений: 2
Точно! Спасибо! Полдня потратил на выискивание ошибки! А все потому что нет нормального редактора для JS, который показал хотя бы где ошибка. Может, посоветуете какой?
кстати, теперь всплыла проблема с кодировкой, которая возвращается с текстом по ajax. Текст в квадратиках. В сторону php скрипта использовал encodeURIComponent и iconv, а вот обратно...
script.js я забыл расписать - там просто функции для ajax.

Coutty 16-02-2010 18:29 1348753

И какую же кодировку используете в Аяксе? Попробуйте Юникод.
Собственно, в каком виде оно возвращается?
Код:

var js;
function include_js(file) {
    var html_doc = document.getElementsByTagName('head')[0];
    js = document.createElement('script');
    js.setAttribute('type', 'text/javascript');
    js.setAttribute('src', file);
    html_doc.appendChild(js);
    js.onreadystatechange = function () {
        if (js.readyState == 'complete') {
            // здесь вызов какой-то функции по обработке данных
        }
    }

    js.onload = function () {
      // здесь вызов той же функции, что и чуть выше - это для совместимости с отдельными браузерами. Наверное, можно и объединить в одном условии через "или", иначе приходится проверять - не повторно ли обрабатываем те же данные.
    }
    return false;
}

Это - основной код, который и выполняет аяксовую роль (хотя, судя по названию, AJAX должен использовать XML, но я использую структуру данных JavaScript). Просто вызываем функцию include_js("script.php?a=1&b=2"), а на выходе получаем JS-файл, в котором что-то вроде этого:
Код:

var brick = 52;
var mapTitle = "Уровень 2";
var descript = "Второй уровень";

map = [
  [1,1,1,1,1,1,1,0,0,0],
  [1,4,4,4,4,4,1,0,0,0],
  [1,4,4,4,4,4,1,1,1,1],
  [1,2,2,2,2,2,1,2,2,1],
  [1,2,2,2,2,2,1,3,2,1],
  [0,1,1,1,1,1,1,1,1,1]
];

Поскольку это JavaScript в чистом виде, эти переменные сразу же можно и использовать.
Оба файла у меня в UTF кодируются - проблем не возникало.


Редактор использую - Notepad++. Он, правда, не выполняет функций по обнаружению ошибок, но хоть синтаксис подсвечивает. Основные ошибки Опера находит, а что-то приходится долго вылавливать через консоль IE :)

Surround 18-02-2010 18:44 1350485

Спасибо!


Время: 16:25.

Время: 16:25.
© OSzone.net 2001-