почему .live не работает в IE9

#internet-explorer-9 #jquery

#internet-explorer-9 #jquery

Вопрос:

Я закончил кодирование своего сайта jQuery, но я нашел это.live jQuery не поддерживается в IE9 или фактически в любом IE.

По крайней мере, таков мой опыт.

Мне интересно, как заставить IE выполнить следующее

 $('ul#mainmenu a li').live('click', function(event){
        //alert(this.id);

        $("li#" lastpageid).removeClass();
        fetchpage(this.id);


        var text = '';
        $('a li#' this.id '').contents().each(function(){
        if(this.nodeType === 3){
         text  = this.wholeText;
        }
        });

        $("#largemenutop").html(text);

        $("li#" this.id).addClass("active");
        lastpageid = this.id;
});
  

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

1. Почему у вас должны быть <li> ‘s внутри якорей? Ваши селекторы не имеют никакого смысла. Работает ли это в каких-либо других браузерах, таких как Firefox или Chrome?

2. tylermwashburn верен, вам действительно следует изменить свой html, чтобы гиперссылки были внутри <li> s

3. Если вы откроете инструменты разработчика IE, перейдете на консоль и запустите $('ul#mainmenu a li').length возвращает ли он количество элементов, которое вы ожидаете?

4. Вы должны использовать $(this) вместо $("li#" this.id) . Однако это не решит вашу проблему.

Ответ №1:

Как указывали другие, убедитесь, что ваша структура HTML имеет смысл, т. е. поместите якорь ВНУТРИ li <li><a href="">blah</a></li> не <a href=""><li>blah</li></a>

<li> это структурированный список, выполнение вышеуказанного не имеет структурного значения и не является правильным способом выполнения действий.

Если ваша цель состоит в том, чтобы привязка полностью занимала элемент списка with, тогда сделайте привязку блочным элементом в CSS: li a { display: block; }

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

 var $lastAnchor = jQuery();

$('#mainmenu').delegate('a', 'click', function() {
    var $this = $(this);

    $lastAnchor.removeClass('active');

    fetchpage(this.id);

    $('#largemenutop').html(
        $this
          .addClass('active')
          .contents()
          .filter(function() { return this.nodeType == 3; })
          .text()
    );

    $lastAnchor = $this;
});
  

Убедитесь, что все внутри $(document).ready(function() { });