【问题标题】:How to blur the div element?如何模糊 div 元素?
【发布时间】:2010-11-18 14:02:39
【问题描述】:

我在 DIV 中有一个下拉菜单。

我希望当用户点击其他任何地方时隐藏下拉菜单。

$('div').blur(function() { $(this).hide(); }

不工作。

我知道 .blur 仅适用于 <a>,但在这种情况下,最简单的解决方案是什么?

【问题讨论】:

  • 似乎您需要处理正文上的 onclick 事件并检查是否在 div 上单击它。如果没有 - 隐藏这个 div。

标签: javascript jquery html onblur


【解决方案1】:

尝试在您的 div 上使用 tabindex 属性,请参阅:

查看this 帖子了解更多信息和演示。

【讨论】:

  • 为此,需要首先关注 div。因此,在尝试单击外部 div 以查看效果之前,请确保它已聚焦
  • 天啊...天才!!非常感谢...在这里我试图找到一种方法来制作自定义事件处理程序... :)
【解决方案2】:

我认为问题在于 div 不会触发 onfocusout 事件。您需要捕获主体上的单击事件,然后确定目标是否是菜单 div。如果不是,那么用户点击了其他地方并且需要隐藏 div。

<head>
  <script>
  $(document).ready(function(){
    $("body").click(function(e) {
      if(e.target.id !== 'menu'){
        $("#menu").hide();
      }      
    });
  });
  </script>
  <style>#menu { display: none; }</style>
</head>

<body>
  <div id="menu_button" onclick="$('#menu').show();">Menu....</div>
  <div id="menu"> <!-- Menu options here --> </div>

  <p>Other stuff</p>
</body>

【讨论】:

  • 我认为这不能回答问题。我的理解是aamir想要在你点击里面的时候隐藏div,除非你点击select元素。
  • 这是错误的。当用户点击不属于菜单的另一个 div 时会发生什么?
  • 一个 div 可以接受焦点并发出 onfocus 和 onblur 如果你为它指定一个 tabindex。试试这个:&lt;div tabindex="100" onfocus="alert('!')"&gt; Blah &lt;/div&gt;
  • "这是错误的。当用户点击另一个不属于菜单的 div 时会发生什么?"是的,没错,这只是一个简单的示例,用于演示在 body 上捕获事件并确定被单击的实际元素。正确实施后,您需要检查目标的其他属性(很可能是 id),以确保您没有再次单击菜单。
  • 虽然这可行,但为了获得更全面的解决方案,特别是如果您的弹出层包含许多嵌套元素,所有这些元素都可能获得点击事件,请查看以下答案:stackoverflow.com/a/4629849/1371408
【解决方案3】:
$("body").click(function (evt) {
     var target = evt.target;
     if(target.id !== 'menuContainer'){
            $(".menu").hide();
    }                
});

给 div 一个 id,例如“menuContainer”。然后您可以通过 target.id 而不是 target.tagName 检查以确保它是特定的 div。

【讨论】:

    【解决方案4】:

    不是最干净的方式,但您可以向 div 添加一个空链接并将其用作 div 的“焦点代理”,而不是捕获页面上的每个点击事件。

    所以你的标记会变成:

    <div><a id="focus_proxy" href="#"></a></div>
    

    并且您的 Javascript 代码应该与链接上的 blur 事件挂钩:

    $('div > #focus_proxy').blur(function() { $('div').hide() })
    

    显示 div 时不要忘记将焦点设置在链接上:

    $('div > #focus_proxy').focus()
    

    【讨论】:

      【解决方案5】:

      我刚遇到这个问题。 我想以上都不能正确解决问题,所以我在这里发布我的答案。这是上述一些答案的组合: 至少它解决了两个问题,只需检查点击点是否相同“id”

      $("body").click(function(e) {
          var x = e.target;
      
          //check if the clicked point is the trigger
          if($(x).attr("class") == "floatLink"){
              $(".menu").show();
          } 
          //check if the clicked point is the children of the div you want to show 
          else if($(x).closest(".menu").length <= 0){
             $(".menu").hide();
          }
      });
      

      【讨论】:

        【解决方案6】:

        .click 在 div 标签内可以正常工作。只要确保您没有超出选择元素的顶部即可。

        $('div').click(function(e) {
            var $target = $(e.target);
            if (!$target.is("select")) { $(this).hide() };
        });
        

        【讨论】:

        • 一个 div 怎么会成为一个选择?
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-05-12
        • 2023-04-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多