为了账号安全,请及时绑定邮箱和手机立即绑定

在元素外部单击时不会调用 on("blur")

在元素外部单击时不会调用 on("blur")

函数式编程 2023-03-03 15:06:17
我有一个使 div 可见的按钮。当我点击 div 之外的任何地方时,会有一个监听器应该再次隐藏它,但它没有被触发。我做错了什么,或者有更好的方法来做到这一点?$("#buttonNewIssue").on("click", function(e) {  console.log("button new issue click");  if ($("#newIssueMenu").hasClass("newIssueMenuHidden")) {    $("#newIssueMenu").removeClass("newIssueMenuHidden");    $("#newIssueMenu").addClass("newIssueMenuShown");    $("#newIssueMenu").css("left", $(this).position().left);    $("#newIssueMenu").css("top", $(this).outerHeight() + $(this).position().top);    $("#newIssue").focus();  } else {    $("#newIssueMenu").removeClass("newIssueMenuShown");    $("#newIssueMenu").addClass("newIssueMenuHidden");  }});$("#newIssueMenu").on("blur", function(e) {  console.log("newIssueMenu blur");  $(this).removeClass("newIssueMenuShown");  $(this).addClass("newIssueMenuHidden");});.newIssueMenuShown {  z-index: 1;  position: absolute;  left: 0;  top: 0;  display: block;  visibility: visible;  transition-property: display, visibility;  transition-duration: 0.4s;}.newIssueMenuHidden {  display: none;  visibility: hidden;  transition: all 0.4s;}<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script><button id="buttonNewIssue" type='button' data-toggle='popover' data-content='Create New Issue'>New Issue</button><div id="newIssueMenu" class="newIssueMenuHidden">  <form><input id="newIssue" type="text" placeholder="Issue Name"></form></div>代码笔: https: //codepen.io/jasonws/pen/VwadjBY
查看完整描述

1 回答

?
慕沐林林

TA贡献2016条经验 获得超9个赞

您需要使用focusout 事件更改模糊事件:

focusout 事件在元素即将失去焦点时触发。此事件与模糊之间的主要区别在于 focusout 会出现气泡,而模糊不会。

工作片段:

$("#buttonNewIssue").on("click", function(e) {

    console.log("button new issue click");

    if ($("#newIssueMenu").hasClass("newIssueMenuHidden")) {

        $("#newIssueMenu").removeClass("newIssueMenuHidden");

        $("#newIssueMenu").addClass("newIssueMenuShown");

        $("#newIssueMenu").css("left", $(this).position().left);

        $("#newIssueMenu").css("top", $(this).outerHeight() + $(this).position().top);

        $("#newIssue").focus();

    } else {

        $("#newIssueMenu").removeClass("newIssueMenuShown");

        $("#newIssueMenu").addClass("newIssueMenuHidden");

    }

});


$("#newIssueMenu").on("focusout", function(e) {

    console.log("newIssueMenu blur");

    $(this).removeClass("newIssueMenuShown");

    $(this).addClass("newIssueMenuHidden");

});

.newIssueMenuShown {

    z-index: 1;

    position: absolute;

    left: 0;

    top: 0;

    display: block;

    visibility: visible;

    transition-property: display, visibility;

    transition-duration: 0.4s;

}


.newIssueMenuHidden {

    display: none;

    visibility: hidden;

    transition: all 0.4s;

}

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>



<button id="buttonNewIssue" type='button' data-toggle='popover' data-content='Create New Issue'>New Issue</button>

<div id="newIssueMenu" class="newIssueMenuHidden">

    <form><input id="newIssue" type="text" placeholder="Issue Name"></form>

</div>


查看完整回答
反对 回复 2023-03-03
  • 1 回答
  • 0 关注
  • 76 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信