Javascript onmousedown事件对象行为异常 测试 var t=document.getElementById(“测试”); t、 onmousedown=函数(e){ 如果(如按钮===0) t、 选中=正确; 否则如果(e.按钮===2) t、 选中=错误; 警报(e.按钮); }
如果我离开该行Javascript onmousedown事件对象行为异常 测试 var t=document.getElementById(“测试”); t、 onmousedown=函数(e){ 如果(如按钮===0) t、 选中=正确; 否则如果(e.按钮===2) t、 选中=错误; 警报(e.按钮); },javascript,html,checkbox,Javascript,Html,Checkbox,如果我离开该行警报(e.按钮)在它所在的位置,复选框单击的行为与预期的一样:所有左键单击选中复选框,所有右键单击取消选中复选框 如果我删除代码警报(e.按钮),然后突然,左键单击将选中该复选框,然后立即取消选中该复选框,右键单击只会打开关联菜单 为什么会发生这种情况?我该怎么做才能使它按照我在第一段中描述的那样运行,但不发出警报(e.button)?您可以尝试将单击事件分离为onlick(用于左键单击)和oncontextmenu(用于右键单击)。 还要记住返回false以防止显示内容菜单 v
警报(e.按钮)代码>在它所在的位置,复选框单击的行为与预期的一样:所有左键单击选中复选框,所有右键单击取消选中复选框
如果我删除代码警报(e.按钮)
,然后突然,左键单击将选中该复选框,然后立即取消选中该复选框,右键单击只会打开关联菜单
为什么会发生这种情况?我该怎么做才能使它按照我在第一段中描述的那样运行,但不发出警报(e.button)
?您可以尝试将单击事件分离为onlick
(用于左键单击)和oncontextmenu
(用于右键单击)。
还要记住返回false代码>以防止显示内容菜单
var t=document.getElementById(“测试”);
t、 onclick=函数(e){
t、 选中=正确;
}
t、 oncontextmenu=函数(e){
t、 选中=错误;
返回false;
}
测试
您可以尝试将单击事件分离为onlick
(用于左键单击)和oncontextmenu
(用于右键单击)。
还要记住返回false代码>以防止显示内容菜单
var t=document.getElementById(“测试”);
t、 onclick=函数(e){
t、 选中=正确;
}
t、 oncontextmenu=函数(e){
t、 选中=错误;
返回false;
}
测试
解释行为
发件人:
与onmousedown事件相关的事件顺序(对于左/中鼠标)
按钮):
昂穆斯敦
上厕所
onclick
与onmousedown事件相关的事件顺序(对于右侧
鼠标按钮):
昂穆斯敦
上厕所
oncontextmenu
浏览器在onclick
事件中“选中”复选框,您可以看到onmousedown
事件在此之前发生
当警报(e.按钮)
触发时,消息框会中断下一个事件的流程,因此onclick
事件永远不会发生,您的代码会通过设置checked
属性来选中复选框。当您没有警报(e.按钮)
时,代码会选中复选框,然后onclick
事件会立即取消选中该复选框
解决方案
请看,他的解决方案比这个好得多
一种解决方案可能是在复选框上方创建一个clicablediv
,尽管这可能会引起可用性问题
.container div{
位置:相对位置;
}
.clicable分区{
位置:绝对位置;
身高:100%;
宽度:100%;
排名:0;
左:0;
z指数:1;
}
测试
var t=document.getElementById(“clicable”);
var c=document.getElementById(“测试”);
t、 onmousedown=函数(e){
如果(如按钮===0)
c、 选中=正确;
否则如果(e.按钮===2)
c、 选中=错误;
};
//右键单击时禁用上下文菜单!
t、 oncontextmenu=函数(){
返回false;
};
解释行为
发件人:
与onmousedown事件相关的事件顺序(对于左/中鼠标)
按钮):
昂穆斯敦
上厕所
onclick
与onmousedown事件相关的事件顺序(对于右侧
鼠标按钮):
昂穆斯敦
上厕所
oncontextmenu
浏览器在onclick
事件中“选中”复选框,您可以看到onmousedown
事件在此之前发生
当警报(e.按钮)
触发时,消息框会中断下一个事件的流程,因此onclick
事件永远不会发生,您的代码会通过设置checked
属性来选中复选框。当您没有警报(e.按钮)
时,代码会选中复选框,然后onclick
事件会立即取消选中该复选框
解决方案
请看,他的解决方案比这个好得多
一种解决方案可能是在复选框上方创建一个clicablediv
,尽管这可能会引起可用性问题
.container div{
位置:相对位置;
}
.clicable分区{
位置:绝对位置;
身高:100%;
宽度:100%;
排名:0;
左:0;
z指数:1;
}
测试
var t=document.getElementById(“clicable”);
var c=document.getElementById(“测试”);
t、 onmousedown=函数(e){
如果(如按钮===0)
c、 选中=正确;
否则如果(e.按钮===2)
c、 选中=错误;
};
//右键单击时禁用上下文菜单!
t、 oncontextmenu=函数(){
返回false;
};
e.preventDefault()
?mousedown事件不会导致复选框更改,只有“click”事件会更改复选框,这是一个mousedown事件,后跟同一元素上的mouseup。警报()
<!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>