почему .live не работает в IE9 - PullRequest
2 голосов
/ 03 июня 2011

Я закончил кодировать свой сайт 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 Ответ

0 голосов
/ 03 июня 2011

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

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

Если ваша цель состоит в том, чтобы якорь полностью использовал элемент списка, тогда сделайте якорь блочным элементом в 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() { });

...