Войти

Показать полную графическую версию : [решено] getElementById на ИЕ


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

Coutty
15-02-2010, 17:43
Надо сказать, что и в Опере оно не работает. Вы забыли приложить файл, который указан в этой строке:
<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
Точно! Спасибо! Полдня потратил на выискивание ошибки! А все потому что нет нормального редактора для JS, который показал хотя бы где ошибка. Может, посоветуете какой?
кстати, теперь всплыла проблема с кодировкой, которая возвращается с текстом по ajax. Текст в квадратиках. В сторону php скрипта использовал encodeURIComponent и iconv, а вот обратно...
script.js я забыл расписать - там просто функции для ajax.

Coutty
16-02-2010, 18:29
И какую же кодировку используете в Аяксе? Попробуйте Юникод.
Собственно, в каком виде оно возвращается?
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
Спасибо!




© OSzone.net 2001-2012