我有一个看似简单的问题,但我似乎找不出我错在哪里。我的技能是公认的缺乏 dojo ,所以请原谅我的天真。
我想要达到的目标我在DOM中有一个元素,我想响应swipe和click事件。但是,当swipe.end事件被触发时,click事件也被触发。我已经尝试防止事件冒泡(在本例中,我假设事件是冒泡的),通过调用stopPropagation
并在事件上直接调用event.stop
,没有用。你可以看到下面的代码片段,或者查看一个working fiddle。
超文本标记语言
<div id='testSwipe'>Swipe Me</div>
苏丹
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
有什么建议吗?
2条答案
按热度按时间cnjp1d6j1#
问题是触发了两个不同的事件:一个
event
(与event.type == 'swipe'
一起)用于滑动,一个mouseEvent
用于单击。一种方法是在swipe.end事件刚刚触发时阻止click事件。这看起来有点像黑客攻击,但确实有效。请参见updated JSFiddle。
作为旁注:看起来Dojo防止冒泡的方法是按照文档使用
dojo.stopEvent(e)
。我确实尝试了这个方法,但不出所料,它没有效果。vmjh9lq92#
当你点击元素时,点击事件总是会被触发,你可以使用dojox/gesture/tap来代替点击事件
已更新fiddle