简体   繁体   English

如何防止来自事件B处理程序的事件A的默认值

[英]How to preventDefault for event A from event B handler

I have an event handler attached to touchstart and I want to call preventDefault as soon as touchmove occurs. 我在touchstart上附加了一个事件处理程序,我想在touchmove发生时立即调用preventDefault I have this code currently. 我目前有此代码。

link.addEventListener("click", function () {
    console.log("clicked");
});

link.addEventListener("touchstart", function (touchStartEvent) {
    var mouseMoveHandler = function () {
        console.log("moved.");

        touchStartEvent.preventDefault(); // This does not work.
        link.removeEventListener('touchmove', arguments.callee);
    };

    link.addEventListener("touchmove", mouseMoveHandler);
});

http://jsfiddle.net/682VP/ http://jsfiddle.net/682VP/

I'm calling preventDefault for touchstart within an event handler for touchmove. 我正在为触摸移动事件处理程序中的touchstart调用preventDefault This does not seem to work because the click event handler is always invoked. 这似乎不起作用,因为始终会调用click事件处理程序。

What am I doing wrong here? 我在这里做错了什么?

When you call preventDefault it works for touchstart event, not for click event. 当您调用preventDefault它适用于touchstart事件,而不适用于click事件。

You can add some property for the link object indicating the moving state and check it inside click handler itself (and stop it either by preventDefault or return false ) 您可以为链接对象添加一些指示移动状态的属性,并在点击处理程序本身中检查它(并通过preventDefaultreturn false停止它)

var link = document.getElementById("link");

link.addEventListener("click", function () {
    if (this.moving) {
        this.moving = false;
        return false;
    }
    console.log("clicked");
});

link.addEventListener("touchstart", function (touchStartEvent) {
    var mouseMoveHandler = function () {
        console.log("moved.");
        this.moving = true;
        link.removeEventListener('touchmove', arguments.callee);
    };

    link.addEventListener("touchmove", mouseMoveHandler);
});

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 在 Javascript 中,如何从父事件处理程序中防止子元素上的默认值 - In Javascript, how to preventDefault on a child element from within parent event handler 如何防止事件处理程序内的回调内的Default? - How can I preventDefault inside a callback inside an event handler? 如何从外部函数而不是在事件侦听器中防止默认? - How to preventDefault from external function and not in the event Listener? 模糊事件处理程序被jquery preventDefault()方法阻止 - Blur event handler is blocked by jquery preventDefault() method 事件处理程序中的 preventDefault() 禁止更改检测 - preventDefault() in Event Handler Suppresses Change Detection 如何重新启用 event.preventDefault? - How to reenable event.preventDefault? 如何强制 event.preventDefault()? - How to force event.preventDefault()? Redux-如何在其提交处理程序中获取表单值并调用event.preventDefault()? - Redux - How to get form values in its submit handler and call event.preventDefault()? 链接在具有带有preventDefault的事件处理程序的元素内不起作用 - Links wont work inside element that have an event handler with preventDefault preventDefault() 不适用于单击事件处理程序上的 window.location.hash - preventDefault() does not work with window.location.hash on a click event handler
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM