【发布时间】:2014-07-09 17:55:36
【问题描述】:
我有一个附加到 touchstart 的事件处理程序,我想在 touchmove 发生后立即调用 preventDefault。我目前有这个代码。
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);
});
我在 touchmove 的事件处理程序中为 touchstart 调用 preventDefault。这似乎不起作用,因为总是调用 click 事件处理程序。
我在这里做错了什么?
【问题讨论】:
-
试试
event.stopPropagation() -
谢谢,但没用。
-
当
touchmove事件处理程序触发时,touchStartEvent不能再被阻止 - 它已经发生了。 -
@Bergi 我明白了。这解释了很多。但是浏览器如何确定事件何时结束?直到下一个事件触发?
-
是的,当所有处理程序都执行完毕后,就会执行默认操作(然后可以处理队列中的下一个事件)。阅读w3.org/TR/DOM-Level-3-Events/#dom-event-architecture
标签: javascript