【问题标题】:why .live not working in IE9为什么 .live 不能在 IE9 中工作
【发布时间】:2011-06-03 06:58:50
【问题描述】:

我完成了我的 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;
});

【问题讨论】:

  • 你为什么要在锚点里面有<li>?你的选择器没有任何意义。它可以在任何其他浏览器(如 Firefox 或 Chrome)中使用吗?
  • tylermwashburn 是正确的,您应该真正更改 html 以在 <li>s 中包含超链接
  • 如果您打开 IE 开发人员工具并转到控制台并运行 $('ul#mainmenu a li').length,它会返回您期望的元素数量吗?
  • 您应该使用$(this) 而不是$("li#"+this.id)。但是,这并不能解决您的问题。

标签: internet-explorer-9 jquery


【解决方案1】:

就像其他人指出的那样,确保您的 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() { });

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-02-21
    • 2021-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多