Возврат AJAX html прерывает события кликов в IE - PullRequest
2 голосов
/ 08 января 2009

У меня есть таблица выгружаемых данных вместе с динамически создаваемым пейджером (вызов AJAX на стороне сервера, применение возвращенного HTML к innerHTML элемента div). Когда я нажимаю следующую страницу на своем пейджере, на сервер отправляется вызов AJAX для получения следующего набора данных, который возвращается в виде строки HTML. Я анализирую HTML и отображаю новые строки таблицы. Я также извлекаю пейджер HTML и загружаю его в родительский DIV innerHTML. Пока проблем нет.

В Firefox я могу нажать на пейджер, и все мои функции JavaScript будут работать нормально. В IE мой первый щелчок теперь не регистрируется, но второй щелчок выполнит ожидаемое действие.

Что в IE отключает первый клик по моему возвращенному HTML?

Ответы [ 4 ]

1 голос
/ 09 января 2009

Оказывается, у меня состояние гонки. Библиотека (внутренняя кодировка) вызывает мою функцию обратного вызова, прежде чем я получу ответ от сервера. В результате ни одна из моих функций обратного вызова ничего не делает, так как я не передаю допустимое значение. Я установил цикл для проверки значения каждые десять миллисекунд, в противном случае ждите. Я изменил учебник отсюда:

http://wonko.com/post/how-to-prevent-yui-get-race-conditions

1 голос
/ 08 января 2009

Я не уверен, связана ли ваша проблема с той, с которой я столкнулся с обратной передачей, но некоторые из библиотек AJAX, которые я использовал, вставляли дополнительные элементы управления на страницу и приводили к тому, что сгенерированный идентификатор в моей ссылке больше не соответствовал до идентификатора сервера, ожидаемого для события обратной передачи.

Событие было запущено, но когда событие было подключено, идентификаторы не совпадали между нажатой ссылкой и объектом ссылки, которого ожидал слушатель.

Однако после первого щелчка при обратной передаче идентификаторы будут повторно синхронизированы, и второй щелчок сможет сопоставить идентификаторы.

Я обнаружил это путем проверки идентификатора в ссылке до и после первого клика.

Опять же, я не уверен, что это то, что происходит с вами. Симптом похож, но в моем случае и Firefox, и IE не работают. Надеюсь, это полезно.

0 голосов
/ 09 января 2009

Если у вас есть состояние гонки, вы можете серьезно пересмотреть свою методологию вместо установки таймера.

Являются ли выгружаемые данные серией элементов одинакового формата? Возможно, вы захотите вернуться на уровень DOM, вырезать дочерние элементы вашего контейнера и перестроить их в DOM. В моих разбитых на страницы скриптах я запрашиваю строку JSON, которая затем анализируется запрашивающей страницей. В результате получается массив объектов, который я могу перебрать и добавить в контейнер. Это также помогает снизить вероятность внедрения скрипта (innerHTML общеизвестно опасен при работе с любым видом пользовательского контента).

0 голосов
/ 08 января 2009

Ваши гиперссылки на пейджеры имеют "#" как href, и ваши обработчики событий JavaScript onclick возвращают false?

Я уже видел проблему в IE, когда вы не возвращаете false из обработчика событий, тогда первый щелчок будет следовать гиперссылке (обратно на ту же страницу), но последующие нажатия будут работать, потому что страница уже был посещен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...