【问题标题】:How to disable jQuery blur event on certain selector如何在某些选择器上禁用 jQuery 模糊事件
【发布时间】:2018-04-11 16:27:47
【问题描述】:

我有以下 jQuery 和 HTML,当失去对输入的关注时,它们会隐藏搜索结果。

#searchResult 上的元素被点击时,这段代码隐藏了我的 id 为 #searchResult 的 div。当点击#searchResult div 上的元素时,我想禁用模糊。基本上,我想在失去焦点时隐藏<div id="searchResult">,并在焦点集中时显示。我怎样才能做到这一点?

$(document).on("blur", "#txtSearchTerm", function () {
    $('#searchResult').hide();
});

$(document).on("focus", "#txtSearchTerm", function () {
    $('#searchResult').show();
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<input id="txtSearchTerm" type="text">

<div id="searchResult">
    <ul>
        <li>
            <a href="http://www.google.com">
                <div class="title">Google.com</div>
                <div class="content">Click here</div>
            </a>
        </li>
        <li>
            <a href="http://www.google.com">
               <div class="title">Google.com</div>
               <div class="content">Click here</div>
           </a>
        </li>
    </ul>
</div>

&lt;div id="searchResult"&gt; 将在每次点击其中的元素时隐藏。

【问题讨论】:

标签: javascript jquery html


【解决方案1】:

您可以使用以下代码简单地关闭模糊事件。

$(document).off("blur", "#txtSearchTerm");

【讨论】:

  • 我不想关闭模糊,我只想关闭 &lt;div id="searchResult"&gt; 的子点击时的模糊
  • &lt;div id="searchResult"&gt; 上的元素是链接,所以 e.preventDefault();不会工作。
【解决方案2】:

你不需要blur 事件来实现:

$(document).click(function(e) {
    if ($(e.target).is("div") && $(e.target).has("ul > li")){
        $('#searchResult').show()
    }
    else $('#searchResult').hide()
    
    if ($(e.target).is(':focus')){
        $('#searchResult').show()
    }
})
#searchResult{
    margin-top: 50px;
    border: 2px solid black;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<input id="txtSearchTerm" type="text">
Click out the input to hide div
<div id="searchResult">
    <ul>
        <li>
            <a href="http://www.google.com">
                <div class="title">Google.com</div>
                <div class="content">click here</div>
            </a>
        </li>
        <li>
            <a href="http://www.google.com">
               <div class="title">Google.com</div>
               <div class="content">click here</div>
           </a>
        </li>
    </ul>
</div>

【讨论】:

  • 点击链接后&lt;div id="searchResult"&gt;没有隐藏。
  • 即使在鼠标按下时
  • @KiranShahi 更新了答案。单击该元素时是否要隐藏#searchResult?
  • 是的@SilverSurfer 我想在点击&lt;div id="searchResult"&gt; 上的元素时再次隐藏。
  • 一切都在 dom、ajax 请求、隐藏/显示等之下进行。
【解决方案3】:

你不能这样做,因为在点击孩子之前会触发模糊。 因此,您需要在关闭结果的文档上添加一个事件处理程序。当有人单击结果时,您取消该事件。像这样的:

$('#txtSearchTerm').click(function(e) {
  $('#searchResult').show();
  e.stopPropagation();
});

$(document).click(function(e) {
    $('#searchResult').hide();
});

$('#searchResult').click(function(e) {
  e.stopPropagation();
});
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<input id="txtSearchTerm" type="text">

<div id="searchResult">
    <ul>
        <li>
            <a href="http://www.google.com">
                <div class="title">Google.com</div>
                <div class="content">Click here</div>
            </a>
        </li>
        <li>
            <a href="http://www.google.com">
               <div class="title">Google.com</div>
               <div class="content">Click here</div>
           </a>
        </li>
    </ul>
</div>

【讨论】:

    【解决方案4】:

    我建议它仅在用户单击某些元素时检查相关目标并消除模糊。

    $(document).on("blur", "#txtSearchTerm", function (e) {
      if ($(e.relatedTarget).hasClass("no-blur")){
      }else{
      $('#searchResult').hide();    
      }
    
    });
    $(document).on("focus", "#txtSearchTerm", function () {
        $('#searchResult').show();
    });
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
    <input id="txtSearchTerm" type="text">
    
    <div id="searchResult">
        <ul>
            <li>
                <a href="http://www.google.com">
                    <div class="title">Google.com</div>
                    <div class="content">click here</div>
                </a>
            </li>
            <li>
                <a href="http://www.google.com">
                   <div class="title">Google.com</div>
                   <div class="content">click here</div>
               </a>
            </li>
        </ul>
    </div>

    【讨论】:

      猜你喜欢
      • 2016-02-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-09
      • 2012-08-28
      • 1970-01-01
      • 1970-01-01
      • 2014-08-10
      相关资源
      最近更新 更多