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
    事件会立即取消选中该复选框

    解决方案 请看,他的解决方案比这个好得多

    一种解决方案可能是在复选框上方创建一个clicable
    div
    ,尽管这可能会引起可用性问题

    .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
    事件会立即取消选中该复选框

    解决方案 请看,他的解决方案比这个好得多

    一种解决方案可能是在复选框上方创建一个clicable
    div
    ,尽管这可能会引起可用性问题

    .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>