jQuery next() 无法与 live() 一起使用

发布于 2024-10-12 08:18:22 字数 752 浏览 2 评论 0原文

当我尝试使用 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() 问题?

When I try and use the jQuery next() method it doesn't work with live().

First off, here is my code:

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

Here's the HTML

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

Would the problem maybe lie in the fact that .toggle_button is nested, making .info_section unreachable?

The second line works great, because it's modifying the element given the live() event. The third line, however, is where the problem's at. This is because it's using next().

Can anyone help me with a solution for my next() problem?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

爱冒险 2024-10-19 08:18:22

查看 HTML,您的声明不应该

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

是:

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

Looking at the HTML should't your statement:

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

be:

$(this).parent().next(".info_section").toggle(400);
微凉 2024-10-19 08:18:22

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

$(".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);
});

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

参考文献:

While you have the working answer, I wanted to leave a suggestion about your toggling of the - and +, I'd suggest using text() instead of HTML, and using the inherent text (for text(), html for html()):

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

And, further, I'd suggest caching your $(this), if you're calling it more than once it's worthwhile using caching to prevent having to recreate it subsequently, leading to:

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

Of course, if you're using a version of jQuery greater than, or including, 1.7, then you should be using the on() method, rather than the (since jQuery 1.7) deprecated live(), which would give:

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

This really is just advice, though, unfortunately posted as an answer to prevent incomprehensible code being pasted into a comment.

References:

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文