【发布时间】:2017-03-05 05:45:56
【问题描述】:
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>testing</title>
</head>
<body>
<input type="checkbox" id="test">
<script>
var t = document.getElementById("test");
t.onmousedown = function(e) {
if (e.button === 0)
t.checked = true;
else if (e.button === 2)
t.checked = false;
alert(e.button);
}
</script>
</body>
</html>
如果我将 alert(e.button); 行保留在原处,则单击复选框的行为将按预期进行:所有左键单击都选中该复选框,所有右键单击都取消选中该复选框。
如果我删除代码alert(e.button);,那么突然之间,左键单击将选中然后立即取消选中该复选框,右键单击只会打开上下文菜单。
为什么会这样?以及我可以做些什么来让它表现得像我在第一段中描述的那样但没有alert(e.button);?
【问题讨论】:
-
e.preventDefault()? mousedown 事件不会导致复选框发生变化,只有“click”事件会发生变化,即在同一元素上的 mousedown 和 mouseup 事件。alert()会破坏这一点并阻止默认点击的发生。 -
不,不幸的是这仍然会导致问题
-
您可以尝试取消
click事件。但是(除了出于兴趣)你为什么要这样做?更改标准控件行为会让用户感到困惑,如果无法通过键盘或一键鼠标使用控件,则会导致辅助功能失败。 -
@Manuel 为什么要覆盖复选框的默认功能?如果用户一直左键单击控件并且没有任何反应,用户会不会感到困惑?
-
这说明了为什么警报不利于调试。
标签: javascript html checkbox