2012-07-01 41 views
0

我有一个看似简单的问题,但我似乎无法弄清楚我要出错的地方。诚然,我的技能缺乏道场,所以请原谅我的天真。如何防止Dojo从冒泡中轻扫手势?

我试图完成:我有,我想对刷卡点击响应事件的DOM元素。但是,当swipe.end事件被触发时,click事件也被触发。我试图防止事件的冒泡(我假设事件在这种情况下冒泡),通过调用stopPropagation并直接致电event.stop对事件,无济于事。你可以看到下面的代码片段,或者查看working fiddle

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 

有什么建议?

回答

0

的问题是两个不同的事件被解雇:一个event(与event.type == 'swipe')的刷卡并点击一个mouseEvent。事件并不冒泡。

实现你想要的东西的一种方法是,如果swipe.end事件刚被触发,则阻止点击事件。这感觉有点像黑客,但工作。请参阅updated JSFiddle

作为一个方面说明:似乎Dojo防止冒泡的方法是根据the docs使用dojo.stopEvent(e)。我确实尝试过,但按预期它没有效果。

0

单击事件总是会在点击元素时触发。而不是使用Click事件,你可以使用dojox/gesture/tap

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

更新fiddle

使用自来水手势