【问题标题】:jQuery how to bind & unbind to window but attach to an element?jQuery如何绑定和取消绑定到窗口但附加到元素?
【发布时间】:2011-11-25 02:13:32
【问题描述】:

我正在构建一个下拉菜单。当您单击箭头时,下拉菜单会打开。

当菜单打开时,我想在菜单项单击或文档模糊时关闭菜单。但似乎我不想像这样绑定以下内容:

$(document.body).bind('click',function(e) {
    if(menuopen) {

因为这将仅跟踪菜单的所有点击。有没有办法让这个绑定在菜单打开时才起作用,在菜单关闭时解除绑定?

谢谢

【问题讨论】:

    标签: jquery jquery-ui


    【解决方案1】:

    这样的事情怎么样?

    $(document.body).on("click blur", function () {
      $("div.dropdown.open").removeClass("open");
    })
    
    $("div.dropdown div.arrow").on("click", function () {
      $(this).closest("div.dropdown").addClass("open");
    })
    

    这是假设添加.open CSS 类会显示菜单,而删除它会隐藏菜单。

    请注意,.on() 从 jQuery 1.7 开始可用。早期版本使用.bind().delegate() 达到相同的效果。

    【讨论】:

    • “ul.dropdown.open”有什么作用?
    • 它选择所有具有dropdownopen CSS 类的<div> 元素。这是一种无需借助全局变量即可跟踪元素的外观状态的方法。
    • 如果您单击下拉菜单内部,第一个链接将关闭下拉菜单,但如果您单击页面上其他任何位置的下拉菜单外部,它不会关闭?那就是问题所在?想法?
    • @AnApprentice:我已经更正了我的代码,再试一次。 — 此外,在不查看实际 HTML 的情况下使选择器正确有点困难。 ;)
    • 谢谢,但这会绑定页面上的所有点击和模糊,我希望通过仅在下拉菜单实际打开时进行此绑定来避免这种情况,
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-19
    • 2014-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多