右键单击就像左键单击事件一样

时间:2016-05-27 13:58:17

标签: javascript jquery html css

我有这段代码:

document.getElementById("1").oncontextmenu = function() {
  return false
}

禁用右键单击后显示的小窗口(仅在按钮/图像上)。

在我的代码(https://jsfiddle.net/nnuyguat/)上,一切正常,除非我右键单击图像,因为它触发左键单击事件并更改图像,直到我移动鼠标。

另一个相关的问题是,如果我按下左键而不释放然后右键单击(释放右键),它也会改变图像。

我需要通过右键单击来防止图像发生变化。它应该作为浏览器的关闭按钮(除了它是另一个图像,它不会关闭任何东西)。

4 个答案:

答案 0 :(得分:2)

您可以使用#include <stdio.h> #include <string.h> #include <stdint.h> #include <stdbool.h> union u_type { unsigned int IntVar; unsigned char Bytes[sizeof(int)]; }temp; bool is_big_endian ( void ) { unsigned int x = 1; char *c = (char*) &x; return (bool)*c; } int main(void) { size_t i; char string[(sizeof(int)*2)+1] = {0}; uint8_t index = 0; temp.IntVar = 0x12345678; printf("%zu\n", sizeof(int)); if (is_big_endian()) { for (i=1; i<sizeof(int)+1; i++) { index += sprintf(&string[index], "%02X", temp.Bytes[sizeof(int)-i]); } } else { for (i=0; i<sizeof(int); i++) { index += sprintf(&string[index], "%02X", temp.Bytes[i]); } } printf(string); printf("\n"); return 0; } 来检查按下了哪个按钮,因为event.button返回一个数字,表示按下了哪个鼠标按钮。

Source

编辑:

event.button

这应该是正确的,因为我之前从未使用过它。

答案 1 :(得分:1)

右键单击事件不会触发左键单击。它只是激活你的对象。您的图片显示“点击”但不准确。它应该说“活跃”。

其次,数字不是有效的ID。因此,将div从id =“1”重命名为id =“one”或类似。

最后,尝试使用此代码,而不是您的代码:

document.getElementById("one").addEventListener('contextmenu', function(ev) {
    ev.preventDefault();
    alert('hello from right click');
    return false;
}, false);

请参阅https://jsfiddle.net/nnuyguat/3/

答案 2 :(得分:1)

右键单击图像更改的问题与您的javascript无关,而与您的CSS有关。当用户激活元素时,:active CSS伪类匹配。根据规范,这应该仅在使用主鼠标按钮激活元素时,但似乎大多数浏览器都没有正确实现规范。有关信息,请参阅此question

可能会放弃:active伪类,并设置一个函数来在左键单击时显式更改内容。

答案 3 :(得分:0)

因为oncontextmenu事件。删除它,它将工作