0

一見単純な質問がありますが、どこが間違っているのかわかりません。Dojo のスキルが明らかに不足しているため、私の素朴さをお許しください。

私が達成しようとしていること:スワイプクリックのイベントに応答したい要素が DOM にあります。ただし、swipe.end イベントがトリガーされると、クリック イベントも発生します。イベントのバブリングを防止しようとしました (この場合、イベントがバブリングしていると想定していますstopPropagation) event.stop。以下のコード スニペットを参照するか、動作中の 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

助言がありますか?</p>

4

2 に答える 2

0

問題は、スワイプ用のevent(with ) とクリック用の2 つの異なるイベントが発生していることです。イベントはバブリングしていません。event.type == 'swipe'mouseEvent

目的を達成する 1 つの方法は、swipe.end イベントが発生した直後にクリック イベントをブロックすることです。ちょっとしたハックのように感じますが、機能します。更新された JSFiddleを参照してください。

補足として: バブリングを防ぐ Dojo の方法は、ドキュメントdojo.stopEvent(e)に従って使用することです。これを試してみましたが、予想通り効果はありませんでした。

于 2012-12-18T11:07:30.460 に答える