javascript - mousedown 上的复选框,mouseup 上取消选中

标签 javascript jquery checkbox preventdefault jquery-events

我正在制作 jQuery 应用程序,其中有一个只有在按下鼠标/键/触摸时才会选中的复选框。选中 mousedown,取消选中 mouseup。

即使我使用 event.preventDefault(),如果鼠标按钮未按下,复选框仍会保持选中状态,但空格键可以正常工作。

$(function() {
  var cb = $("input");
  cb
    .on("mousedown keydown", function(event) {
      event.preventDefault();
      cb.prop("checked", true);
    })
    .on("mouseup keyup", function(event) {
      event.preventDefault();
      cb.prop("checked", false);
    });
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<input type=checkbox autofocus>

我知道上面的代码需要一些工作才能在任何情况下(触摸等)正常工作,但它只是为了测试目的而编写的

最佳答案

问题是因为 click 事件在复选框上释放 mouseup 时触发,这会强制 checked 属性为 true 。要修复此 Hook 事件处理程序到 click 并简单地对其调用 preventDefault()

另请注意,您可以向 on() 提供一个对象,该对象以您要 Hook 的事件名称为键,而不是多次调用 on() :

$(function() {
  var $cb = $("input");
  $cb.on({
    "mousedown keydown": function(e) {
      e.preventDefault();
      $cb.prop("checked", true);
    },
    "mouseup keyup": function(e) {
      e.preventDefault();
      $cb.prop("checked", false);
    },
    'click': function(e) {
      e.preventDefault();
    }
  });
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<input type=checkbox autofocus>

或者,正如@enapupe 在评论中指出的那样,您可以完全删除 mouseup 事件处理程序,让默认的 click 事件正常运行以切换状态复选框:

$(function() {
  var $cb = $("input");
  $cb.on({
    "mousedown keydown": function(e) {
      e.preventDefault();
      $cb.prop("checked", true);
    }
  });
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<input type=checkbox autofocus>

两者都可以,这取决于您希望在抑制 click 事件方面的行为

关于javascript - mousedown 上的复选框,mouseup 上取消选中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54448321/

相关文章:

javascript - 时间轴上的鱼眼效果

javascript - 能够在渲染 Highcharts 后显示检查系列的标签

javascript - 在外部文件和目录结构中存储 jquery 代码?

javascript - Jquery append() 到 ul 不适用于嵌套 $.each 循环

javascript - XMLHttpRequest 上传属性到底有什么好处?

javascript - 延迟后淡入/淡出附加的 div

javascript - 如何使用 WOW.js 和 BS3 为固定的 div 设置动画而不必滚动到顶部

jQuery(中)高效使用

jquery - 单击自定义跨度时,复选框值从 0 更改为 1

python - 复选框/组合框的 Tkinter 下拉列表