1

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

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

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

4

1 回答 1

3

在 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)">
于 2013-04-25T06:28:18.923 回答