【问题标题】:JQuery toggle unbind/bindJQuery 切换取消绑定/绑定
【发布时间】:2013-11-29 02:03:35
【问题描述】:

作为我正在尝试设计的网站的一部分,我有一个 id 为“powersettings”的 div,单击它会切换一个 id 为“powermenu”的 div,并在我的“内容”div 上切换类“blur”和"tab a"s,这一切都成功了。

当点击“powersettings”时,我试图让我的“tab a”解除绑定(点击),这是成功的。但是,当再次单击“powersettings”以关闭“powermenu”时,我希望它绑定(单击)...谁能告诉我该怎么做?

我的相关 jQuery 代码:

$("#powersettings").click(function () {
    $("#powermenu").toggle();
    $(".content, .tab").toggleClass('blur');
    $("#tab a").unbind("click")
});

谢谢

安德鲁

更新 1:("#tab a") 涉及根据菜单选择更改我的 div 内容的代码:

$('#tab a').click(function(e){
  hideContentDivs();
  var tmp_div = $(this).parent().index();
  $('.main #content').eq(tmp_div).fadeIn(2000);
});

function hideContentDivs(){
    $('.main #content').each(function(){
       $(this).hide();
    });
}
    hideContentDivs();
    $('.main #content').eq(0).fadeIn(2000);});

更新 2:根据要求,这是我的 div 和电源菜单的 html 代码

<div class="menu">
<div class="tab" id="tab"><a href="#">Home</a></div>
<div class="tab" id="tab"><a href="#">Page 1</a></div><div class="tab" id="tab"><a href="#">Page 2</a></div>
<div class="tab" id="tab"><a href="#">Page 3</a></div>
</div>

上面是标签和菜单链接的 HTML 代码。电源菜单只是一个带有 id 和类“powermenu”的简单菜单,因为我还没有向 div 添加任何内容。

【问题讨论】:

  • 你能为此做一个小提琴吗?
  • 如何将click 事件绑定到#tab a?仅通过 jQuery?这对“重新绑定”步骤很重要。
  • 你的意思是当再次点击“powersettings”时,$("#tab a") 也会再次重新绑定一些“点击”事件?
  • @NewUser - 我不知道如何制作小提琴,这是否意味着上传我所有的代码,因为有很多,我只发布了相关的部分。
  • @acdcjunior - 这就是我想要回答的问题,我如何重新绑定单击到 $("#tab a"),我希望它在单击取消绑定的同一个按钮时重新绑定第二次。

标签: jquery toggle bind toggleclass unbind


【解决方案1】:

作为函数 .toggle(fn1, fn2...) 已弃用(参见:http://forum.jquery.com/topic/beginner-function-toggle-deprecated-what-to-use-instead

你可以这样做:

var clicked = true;
$("#powersettings").click(function () {
    $("#powermenu").toggle();
    $(".content, .tab").toggleClass('blur');
    if (clicked) {
        $('#tab a').off('click',foo);
        clicked = false;
    }
    else {
        $('#tab a').on('click',foo);
        clicked = true;
    }
});

这是一个小提琴(http://jsfiddle.net/android/3U4sK/1/)。

作为你更新的代码,foo 函数应该是这样的:

function foo(e){
  hideContentDivs();
  var tmp_div = $(this).parent().index();
  $('.main #content').eq(tmp_div).fadeIn(2000);
}

【讨论】:

  • 这不起作用,它仍然解除绑定“#tab a”但没有重新绑定它们。
  • 我更新了答案。重新绑定不起作用,因为我错过了绑定/取消绑定中的函数名称(参见小提琴)。
  • 我重试了这段代码,但它仍然不起作用,内容 div 不再显示,电源或颜色菜单也没有。
  • 你能提供一个小提琴吗?
  • 是的,jsfiddle.net/aw555000/b3CJg 视窗弄乱了我的一些定位
【解决方案2】:

这需要对您的代码进行一些小的更改,但应该可以解决。

1- 删除 unbind() 行,因为它不再需要:

$("#powersettings").click(function () {
    $("#powermenu").toggle();
    $(".content, .tab").toggleClass('blur');
    // $("#tab a").unbind("click") // remove this line
});

2- 在#tab aclick() 中添加一个if 语句:

$('#tab a').click(function(e) {
    if ($("#powermenu").is(':visible')) {
        return; // if #powermenu is not visible, do nothing (quit the function)
    }
    hideContentDivs();
    var tmp_div = $(this).parent().index();
    $('.main #content').eq(tmp_div).fadeIn(2000);
});

工作原理:当您在#powersettings'点击 ($("#powersettings").click(function () {...) 时切换 #powermenu 的可见性 ($("#powermenu").toggle();)。您似乎希望#tab a 的点击无效,而#powermenu 被隐藏。这段代码就是这样做的。

【讨论】:

  • 我希望#tab a's 在电源菜单打开时不起作用,我尝试了您的代码,并且喜欢 andyf 的代码,它阻止了两个菜单弹出并停止显示内容 div...我不'不知道为什么这段代码都不起作用......
  • 好吧,也许我们弄错了。将 :hidden 更改为 :visible。试一试。
  • 它仍然无法正常工作并完全阻止我的 jquery 脚本工作......我真的不明白我的代码发生了什么
  • 嗯,这很令人困惑。看来我们把问题弄错了。也许显示更多的 javascript 代码和 html 会更容易获得帮助。
  • 如果我切换某些东西(例如类并且它有它)也许它会起作用,所以菜单链接只有在“.tab”上与另一个类相反时才处于活动状态?有可能吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多