Javascript 在jQuery中mousedown后不触发Mouseup

Javascript 在jQuery中mousedown后不触发Mouseup,javascript,jquery,Javascript,Jquery,当我单击时,会收到一个警告,说“向下”,但不是“向上”。我读到e.preventDefault()应该可以解决问题,但它没有。有人有什么建议吗 $(document).mousedown(function(e){ e.preventDefault(); alert("down"); }); $(document).mouseup(function(e){ alert("up"); }); 问题是mousedown警报已启

当我单击时,会收到一个警告,说“向下”,但不是“向上”。我读到e.preventDefault()应该可以解决问题,但它没有。有人有什么建议吗

   $(document).mousedown(function(e){
        e.preventDefault();
        alert("down");
   });
   $(document).mouseup(function(e){
        alert("up");
    });

问题是mousedown警报已启动,并阻止了mouseup被触发。如果只向上移动鼠标,它可以正常工作,或者如果您使用的不是警报窗口,则此方法可以正常工作

带有输入框的第二个示例:


尝试将代码放入ready函数,如下所示:

$(document).ready(function(){
  $(document).mousedown(function(e){
    e.preventDefault();
    alert("down");
  });
});

这是因为mousedown事件显示的警报阻止了mouseup事件的触发

如果改用console.log,您将看到两个事件都按预期触发


问题是,当向下警报发生时,文档失去焦点,警报框获得焦点。因此,当您松开按钮时,它不会被文档捕获,因为它发生在警报框中


我想你会发现,如果你把你的
alert()
切换到
console.log()
,它就会工作。

它甚至不会阻止
鼠标启动。实际上,它的工作原理与您的示例中的
警报
的组合中加入了一个小的警告


“警报”对话框不在窗口范围内,当鼠标向上移动且对话框处于活动焦点时,事件将转到警报。如果您单击并按住鼠标按钮并用enter键关闭警报,您将发现松开按钮时会触发
mouseup
事件。

您应该尝试另一种类型的元素,只要认为事件已记录在文档上,鼠标离开某个元素意味着鼠标也输入了另一个元素。如果鼠标离开文档,它去了哪里?如果jQuery没有准备好绑定,那么其他事件绑定也不会工作。
$(document).mousedown(function(e){
    $("#text").val("mousedown");
});   
$(document).mouseup(function(e){
    $("#text").val("mouseup");
});
$(document).ready(function(){
  $(document).mousedown(function(e){
    e.preventDefault();
    alert("down");
  });
});
$(document).mousedown(function(){
    console.log('test');
});
$(document).mouseup(function(){
    console.log('test2');
});