jQuery next() 不能与 live() 一起使用

Posted

技术标签:

【中文标题】jQuery next() 不能与 live() 一起使用【英文标题】:jQuery next() not working with live() 【发布时间】:2011-01-17 21:08:41 【问题描述】:

当我尝试使用 jQuery next() 方法时,它不适用于 live()

首先,这是我的代码:

$(".toggle_button").live('click', function() 
    $(this).html($(this).html() == '-' ? '+' : '-');
    $(this).next(".info_section").toggle(400);
);

这是 HTML

<div class='section_toggle_container'>
    <div class='toggle_button'>-</div>
    <strong>Driver Information:</strong>
</div>
<div class='info_section'>
    info here
</div>

问题是否可能在于.toggle_button 是嵌套的,导致.info_section 无法访问?

第二行效果很好,因为它修改了给定live() 事件的元素。然而,第三行是问题所在。这是因为它使用的是next()

谁能帮我解决我的next() 问题?

【问题讨论】:

您需要显示我认为适用的 HTML。 .toggle_button 元素之后是否可能没有 .info_section?或者您是在使用上面一行中的.html() 调用来破坏this?尝试改用.text() 到底是什么问题? 你的 HTML 是什么样子的?next() 只会返回一个元素当且仅当this 的下一个兄弟元素具有类info_section。它确实返回类info_section的下一个兄弟。 @Orbling: html 只影响内容,不影响元素本身。 发布您的实际代码,我不知道您的问题是什么。我可以让它正常工作:jsfiddle.net/jWR6A 但我所做的只是随机猜测你想做什么。发布 HTML。或者更好地描述 .next 没有做什么,因为它完全按照文档所说的去做。 @Felix Kling:好点子,但考虑到正在进行的更改,使用.text() 仍然会更好。 【参考方案1】:

看HTML不应该是你的说法:

$(this).next(".info_section").toggle(400);

是:

$(this).parent().next(".info_section").toggle(400);

【讨论】:

【参考方案2】:

虽然您有有效的答案,但我想留下一个关于您切换 -+ 的建议,我建议使用 text() 而不是 HTML,并使用固有的 text(对于text(), htmlhtml()):

$(".toggle_button").live('click', function() 
    $(this).text(function(index,text) 
        return text == '-' ? '+' : '-';
    );
    $(this).parent().next(".info_section").toggle(400);
);

此外,我建议缓存您的 $(this),如果您不止一次调用它,则值得使用缓存来防止随后重新创建它,从而导致:

$(".toggle_button").live('click', function() 
    var $this = $(this);
    $this.text(function(index,text) 
        return text == '-' ? '+' : '-';
    );
    $this.parent().next(".info_section").toggle(400);
);

当然,如果您使用的 jQuery 版本大于或包含 1.7,那么您应该使用 on() 方法,而不是(自 jQuery 1.7 起)已弃用的 live(),这会给出:

$(".toggle_button").on('click', function() 
    var $this = $(this);
    $this.text(function(index,text) 
        return text == '-' ? '+' : '-';
    );
    $this.parent().next(".info_section").toggle(400);
);

不过,这实际上只是建议,不幸的是,作为答案发布,以防止将难以理解的代码粘贴到评论中。

参考资料:

html()live()on()text()

【讨论】:

以上是关于jQuery next() 不能与 live() 一起使用的主要内容,如果未能解决你的问题,请参考以下文章

jquery选择器中的加号(+)是什么

jquery中的bind()live()的区别与使用(事件处理)

jQuery事件绑定on()bind()live()与delegate() 方法详解

jquery next plus 切换不起作用。这是一个错误吗?

在微信公众号开发(微站)过程中用Zepto/jquery的on/live绑定的click事件点击无效(不能执行)

JQuery获取append后的动态元素:live()和on()