账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    mousedown事件点击一次执行三次是怎么回事
    80
    0

    用js实现一个下拉菜单,要求当鼠标点击下拉菜单以外的区域,下拉框会自动收起。现在要给下拉菜单一个搜索功能,dropList是下拉框,搜索框位于dropList里面,searchKey是定义的一个存放搜索框input输入值的变量。
    如下代码,断点跟踪显示,点击一次执行了三次dropList.hide(),第一次执行后会保留searchKey的值,第二次就把它清空了,导致我再次打开下拉框时,搜索框输入的值为空。
    怎么才可以让搜索框的值不被清空?正常来说,input的输入值是会自动保留的,不知道是不是我这个mousedown事件写的有问题,求大神指教。

      dropList.mousedown(function(e){
                    e.stopPropagation(); //document的mousedown会隐藏下拉框,这里要阻止冒泡
                });
     $(document).bind('mousedown.fitsCombo',this.globalEvent=function(e){
                    console.log(dropList);
                    console.log(self.searchKey);
                    dropList.hide();//隐藏下拉框
                    console.log(dropList);
                    console.log(self.searchKey);
                });
    1
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 拉格朗日中值定理 普通会员 1楼

      在JavaScript中,mousedown事件和mouseup事件都会被执行一次,但是mousedown事件会执行两次,而mouseup事件会执行一次。

      这是因为mousedown事件会在鼠标按下时触发,而在鼠标松开时,如果在按下鼠标的同时又点击了鼠标,那么这个点击会引发mousedown事件的重复触发,这就导致了mousedown事件执行了两次。

      为了避免这种情况,可以在按下鼠标后立即执行mouseup事件,或者使用event.stopPropagation()方法来阻止mousedown事件的重复触发。

      例如:

      javascript document.addEventListener('mousedown', function(event) { event.stopPropagation(); // 执行你的代码 });

      javascript document.addEventListener('mouseup', function(event) { event.stopPropagation(); // 执行你的代码 });

      在这个例子中,当鼠标按下时,mousedown事件会被触发,然后鼠标松开时,mouseup事件会被触发,这两个事件都不会重复触发。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部