【问题标题】:onmouseup not working in safarionmouseup 在 Safari 中不起作用
【发布时间】:2013-04-25 15:05:07
【问题描述】:

这是我从 w3schools 获得的示例,仅 safari 浏览器就出现了奇怪的行为。

http://www.w3schools.com/jsref/tryit.asp?filename=tryjsref_onmousedown

Safari: 如果我们左键单击段落顶部,文本变为红色,当我离开时,文本变为绿色。 没关系。 现在,我在段落顶部右键单击。现在文本颜色变为红色,当我离开时,它永远不会变为绿色。即如果我们使用右键单击,onmouseup 在 Safari 中不起作用。谁能告诉我为什么? 有什么解决办法吗?

【问题讨论】:

    标签: javascript safari onmouseup onmouseclick


    【解决方案1】:

    在 safari 中,似乎右键单击时将焦点赋予上下文菜单,因此上下文菜单接收 mouseup 事件而不是 P 元素。至于解决方案,您可以检测鼠标按钮以防止它在右键单击时运行。右键单击事件是 除非您想处理自定义上下文菜单,否则会很混乱。

    如果您希望鼠标右键单击时触发 mouseup 事件在 safari 中工作,您需要通过将此属性添加到 P 元素来禁用上下文菜单:

    oncontextmenu="return false">
    

    也可以检测左击是否触发了事件(通常是你要处理的按钮):

    function mouse_handler(event) {
        var evt=window.event||event;
        var button = evt.which || evt.button;
        if (button == 1) { // if left mouse button
            // handle the event
        }
    }
    

    在 w3schools 的示例中,它会导致如下所示:

    function myFunction(elmnt,clr,event)
    {
        var evt=window.event||event;
        var button = evt.which || evt.button;
        if (button == 1) { // if left mouse button
            elmnt.style.color=clr;
        }
    }
    

    然后在函数调用中传递事件:

    <p onmousedown="myFunction(this,'red',event)" onmouseup="myFunction(this,'green',event)">
    

    【讨论】:

    • 哦,不。对不起。你误会我了。我不想禁用 onmouseup 和 onmousedown 右键单击​​。我想为 safari 浏览器触发 onmouseup
    • 实际上,我使用的是上下文菜单。因此用户直接右键单击文本框顶部。所以我想在用户右键单击文本框时触发 onmouseup。虽然我使用了 onfocus,但它并没有返回我需要的确切值
    • 我认为你将很难与 safari 的默认行为以及其他一些浏览器作斗争,就好像元素没有收到事件一样(即:当上下文菜单获得焦点时),它只是无法处理。您可能需要牺牲上下文菜单或右键单击交互。
    • 快哭了。计划使用 onmousedown
    • 在我看来,用户习惯于只有在需要访问上下文菜单时才右键单击,所以如果它不与 ui 交互也没什么大不了的。我想不出真正需要默认上下文菜单和自定义交互的情况。这是我的看法。
    猜你喜欢
    • 2022-08-03
    • 1970-01-01
    • 2019-01-08
    • 2019-07-12
    • 2013-08-17
    • 2015-05-12
    • 2012-12-15
    • 1970-01-01
    • 2013-07-24
    相关资源
    最近更新 更多