检测右键单击+左键单击不起作用

Detect right click + left click not working

本文关键字:单击 不起作用 右键 检测      更新时间:2023-09-26

>我在这里问(如何检测右键单击+左键单击)如何检测用户右键单击时按住它并单击鼠标左键

我确实喜欢第一个答案,但它没有按预期工作,

首先在我的代码中,我创建表和 td,然后像这样向每个 td 添加事件:

td.setAttribute('onmousedown', "handleMouseDown(event)");
td.setAttribute('onmouseup', "handleMouseUp(event)");
td.setAttribute('onclick', "checkCell(this)");

我不使用 addEventListener',因为 IE <9。

处理事件的两个函数是:

function handleMouseDown (e) {
     if (e.button == 2) rightClicked = true;
}
function handleMouseUp (e) {
    if (e.button == 2) rightClicked = false; 
}

首先,它的工作很好,handleMouseUp剂量并不总是rightClicked设置为假
当我被单击左按钮时,当我释放右按钮时,它的 dosent rightClicked设置为 false所以我添加到checkCell如果rightClicked true所以把它设置为 false。

 if (rightClicked) {
      rightClicked = false;

现在在我第一次单击右键单击并离开它的工作时,但在那之后它不再工作,除非继续按左键单击,之后有时它可以工作
有时它甚至在第一次就起作用了

我在 jsfiddle 中的所有代码:https://jsfiddle.net/e4pf78zu/它的 dosent 在那里工作正常,控制台中显示的函数未定义我不知道为什么有人可以为我解决这个问题谢谢

由于几个原因,这不起作用。

首先,你

以一种非常奇怪的方式为每个单元格设置事件侦听器,更不用说你做错了。

td.setAttribute('onmousedown', "handleMouseDown(event)");

你为什么不干脆做

td.onmousedown = handleMouseDown;

另外,你正在做handleMouseDown(event),我很确定这是错误的。

通常,请不要像这样添加事件处理程序。

我不使用 addEventListener',因为 IE <9。

IE9及更低版本不支持addEventListener但它们确实支持attachEvent这可能比做.on<EventName> = function(){}更好,或者你目前在那里做的事情。

此外,您甚至可以在这些浏览器中模拟addEventListener。只需在此处使用此 polyfill,然后通常阅读有关addEventListener

句柄鼠标向上剂量并不总是设置右键当我被单击左按钮时单击为 false

只有当您释放正确的按钮时,rightClicked才会变得false,以便按预期工作。

它的 dosent 设置右键当我释放右按钮时单击为 false

好吧,根据您提供的代码,这是不可能的。代码非常清楚地说

if (e.button == 2) rightClicked = false; 

所以我添加到检查单元格,如果右键单击为真,因此将其设置为 false。

这可能不需要。首先解决您的其他问题,然后查看您是否真的需要这样做。