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

时间:2016-03-14 10:12:48

标签: javascript

我在这里(How to detect right click + left click)询问如何检测用户右键单击它并单击鼠标左键

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

首先在我的代码中创建table和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 dosen总是将rightClicked设置为假 当我点击左键时,当我释放右键时,它的剂量将rightClicked设置为假 所以如果checkCellrightClicked,我会添加到true,因此请将其设置为false。

 if (rightClicked) {
      rightClicked = false;

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

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

1 个答案:

答案 0 :(得分:0)

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

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

  

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

你为什么不干脆做

td.onmousedown = handleMouseDown;

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

一般情况下,请不要添加这样的事件处理程序。

  

我不使用addEventListener`因为IE< 9。

IE9及以下版本不支持addEventListener,但它们支持attachEvent,这可能比执行.on<EventName> = function(){}或您当前在那里做的更好。

此外,您甚至可以在这些浏览器中模拟addEventListener。只需在此处使用this polyfill,一般情况下请阅读addEventListener

  

当我点击左键时,handleMouseUp并不总是将rightClicked设置为false

rightClicked只有在您释放右键时才会成为false,以便按预期工作。

  

当我释放右键时,它的剂量设置正确点击为假

嗯,根据您提供的代码,这是不可能的。代码非常明确地说

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

所以如果rightClicked为true,我将添加到checkCell,因此将其设置为false。

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