Событие щелчка jQuery не работает в IE7 и IE8

#javascript #jquery #internet-explorer #events #click

#javascript #jquery #internet-explorer #Мероприятия #нажмите

Вопрос:

Следующий код в IE7 или IE8 не работает. Это ошибка? Он отлично работает в IE6 (невероятно!)

http://jsfiddle.net/zgSmT/

Комментарии:

1. У меня это работает в IE7 и IE8. Вызывали ли вы панель разработчика в IE8 и пытались ли отладить JS?

2. Я использую ietester, так что, возможно, именно поэтому…

3. Да, я был непосредственно в браузере, и это сработало отлично… Я использовал IE7, режим Quriks IE7, стандарт IE8 и особенности IE8… странно.

Ответ №1:

Попробуйте использовать live событие или привязать событие после document загрузки:

 $('#clickme').live('click', function(){
    alert('hey');
});
  

Кроме того, вы все еще загружаете scripts.js то, чего не существует в вашем примере с fiddle — это также может вызвать проблему.

Комментарии:

1. Нет! Это все еще не работает. Это сводит меня с ума! Я обновил код здесь jsfiddle.net/zgSmT/4 . Есть другие идеи?

2. Live действительно хорош, только если вы добавляете одно и то же событие к куче разных объектов. Если у вас есть только один объект, то добавление прослушивателя событий с помощью click — это то же самое.

3. @El Guapo: Нет, live гарантирует, что даже если элемент, соответствующий селектору, будет создан (добавлен в DOM) после выполнения javascript, событие все равно будет привязано. С помощью click событие будет привязано только в том случае, если элемент уже существует в DOM.

4. Ок, значит, это, должно быть, ошибка ietester. Я установил ie9 в своей системе, и теперь единственный способ протестировать эти вещи — ietester или виртуальная машина, поэтому мне придется использовать виртуальную машину.

5. Жаль, что я не нашел этот ответ час назад. Также хотелось бы, чтобы я мог дать вам больше голосов. Действительно спасло меня в этом. Проклятый старый IEs

Ответ №2:

Вы могли бы попробовать

 $().ready(function ()
{
    $('#clickme').live('click', function(){
        alert('hey');
    });
}
  

Чтобы убедиться, что все загружено.