Возвращенный AJAX html прерывает события кликов IE

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

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

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


person Mike Robinson    schedule 08.01.2009    source источник
comment
Как устроена ссылка на страницу? это встроенный onclick= или он подключен в коде?   -  person Diodeus - James MacFarlane    schedule 08.01.2009
comment
Вы убедились, что первый щелчок не отправляет запрос на сервер? Например, в Fiddler?   -  person Crescent Fresh    schedule 08.01.2009
comment
@Diodeus - страница подключена к коду - у меня есть прослушиватель событий, настроенный на его родительском div. Ответ AJAX не изменяет родительский элемент div, но содержащийся в нем HTML-код разбивки на страницы изменяется. @crescentfresh - Хороший звонок, очевидно, данные возвращаются, но я отвечаю на обратный вызов   -  person Mike Robinson    schedule 08.01.2009
comment
вы можете опубликовать это решение как ответ на свой вопрос, подождать два дня, а затем принять его... это может позволить голосовать за решение независимо от вопроса...   -  person David Alpert    schedule 08.01.2009


Ответы (4)


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

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

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

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

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

person Jay S    schedule 08.01.2009

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

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

person Mike Robinson    schedule 08.01.2009
comment
Я хотел бы указать (три года спустя), что использование тайм-аута - не лучший способ справиться с этим. Такое ощущение, что настройка и прослушивание события были бы гораздо надежнее. Однако, поскольку я больше не знаю, о чем был этот вопрос, я просто оставлю его как есть. - person Mike Robinson; 15.11.2012

Имеются ли гиперссылки на пейджерах со знаком «#» вместо href и возвращают ли обработчики событий JavaScript onclick false?

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

person John Topley    schedule 08.01.2009

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

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

person Ry Biesemeyer    schedule 09.01.2009