如何取消下一个事件通话?

时间:2019-06-20 02:41:23

标签: javascript preventdefault cancellation stoppropagation

我有一个事件“ pointerdown”,但是当其中一个回调满足某个条件时,我希望它取消事件调用。因此,不应调用所有后续的回调。

我尝试了evt.preventDefault();但这不起作用,我也尝试过evt.stopPropagation();但这不起作用。

const pointer = getMousePos(evt);
if (inBounds(pointer)) {
    evt.preventDefault();
    evt.stopPropagation();
}

inBounds函数按预期返回true,但仍会调用该事件的下一个回调。首先添加此事件,然后再添加其他我想取消的事件,但不是。

2 个答案:

答案 0 :(得分:0)

使用您切换的全局变量来指示是否应运行其他事件代码。

let doBFunction = true;
element.addEventListener("pointerdown", function(evt) {
    const pointer = getMousePos(evt);
    if (inBounds(pointer)) {
        doBFunction = false;
    } else {
        doBFunction = true;
    }
    // rest of code
});
element.addEventListner("pointerdown", function(evt) {
    if (!doBfunction) {
        return;
    }
    // rest of code
});

答案 1 :(得分:0)

如果您的侦听器附加在同一元素上,则需要使用currentDir = 'theDirectory' for file in os.listdir(currentDir): print(file) newExt=os.path.splitext(file)[1].lower() oldName = currentDir+'/'+file newName = os.path.splitext(file)[0]+newExt os.rename( oldName , newName ) 而不是stopImmediatePropagation()

  

Event接口的stopImmediatePropagation()方法可防止调用同一事件的其他侦听器。

     

如果针对同一事件类型将多个侦听器附加到同一元素,则将按照添加它们的顺序来调用它们。如果在一次这样的调用期间调用了stopImmediatePropagation(),则不会调用其余的侦听器。

https://developer.mozilla.org/en-US/docs/Web/API/Event/stopImmediatePropagation

您还可以在这里找到两种方法之间差异的一些描述: stopPropagation vs. stopImmediatePropagation

这里有一些使用方法的演示。在这种情况下,当计数器为偶数时,将永远不会调用第二个侦听器。

stopPropagation()
let counter = 0

const button = document.getElementById('TheButton')

button.addEventListener('click', e => {
  counter++
  
  console.log(`first listener: ${counter}`)
  
  if (counter % 2 === 0) e.stopImmediatePropagation()
})

button.addEventListener('click', e => {
  console.log(`second listener: ${counter}`)
})