0

我有一个看似简单的问题,但我似乎无法弄清楚我哪里出错了。我的技能在道场中确实缺乏,所以请原谅我的幼稚。

我想要完成的事情:我在 DOM 中有一个元素,我想响应滑动单击事件。但是,当触发 swipe.end 事件时,也会触发 click 事件。stopPropagation我试图通过调用和直接调用事件来防止事件冒泡(我假设在这种情况下事件正在冒泡),event.stop但无济于事。您可以在下面查看代码片段,或查看工作小提琴

HTML

<div id='testSwipe'>Swipe Me</div>​

JS

require({
}, [ 
    'dojo/dom', 
    'dojox/gesture/swipe',
    'dojo/on',
    'dojo/_base/event'
], function(dom, swipe, on, event) {
    var div = dom.byId('testSwipe');

    on(div, swipe.end, function(e) {
        console.log("### SWIPE");

        e.stopPropagation();  // Click event still fires
        event.stop(e);  // Click event STILL fires
    });

    on(div, 'click', function(e) {
        console.log("### CLICK");
    });
});

在此示例中,滑动事件将导致以下输出:

### SWIPE
### CLICK

有什么建议么?​</p>

4

2 回答 2

0

问题是两个不同的事件被触发:一个event(with event.type == 'swipe') 用于滑动和一个mouseEvent用于单击。事件没有冒泡。

如果 swipe.end 事件刚刚触发,则实现您想要的一种方法是阻止 click 事件。感觉有点像黑客,但有效。请参阅更新的 JSFiddle

附带说明:防止冒泡的 Dojo 方法似乎是dojo.stopEvent(e)按照docs使用。我确实尝试过,但正如预期的那样,它没有效果。

于 2012-12-18T11:07:30.460 回答
0

当您单击元素时,单击事件将始终触发。您可以使用dojox/gesture/tap来使用点击手势,而不是使用点击事件

on(div, tap, function(e) {
    console.log("### CLICK");
});

更新了小提琴

于 2013-10-08T07:10:15.173 回答