4

ダブルクリックイベントが発生したときにシングルクリックイベントをキャンセルするにはどうすればよいですか?

私はすでにいくつかの関連を見てきましたが、うまくいくものを見つけました

ダブルクリック イベントが検出されたときにクリック/マウスアップ イベントをキャンセルする必要がある

function singleClick(e) {
    // do something, "this" will be the DOM element
}

function doubleClick(e) {
    // do something, "this" will be the DOM element
}

$(selector).click(function(e) {
    var that = this;
    setTimeout(function() {
        var dblclick = parseInt($(that).data('double'), 10);
        if (dblclick > 0) {
            $(that).data('double', dblclick-1);
        } else {
            singleClick.call(that, e);
        }
    }, 300);
}).dblclick(function(e) {
    $(this).data('double', 2);
    doubleClick.call(this, e);
});

ただし、.click() の代わりに .on("click") を使用すると、このコードは機能しません。

これはなぜですか?.on() を使用する必要があるため、.click() の使用はオプションではありません

4

1 に答える 1

1

.on('click') を実行する場合は、.on('dblclick') を実行する必要があります。(dblが起動しないという同じ問題がありました)

また、イベントが発生しない場合は、この関数の後にセレクターを追加したことが原因である可能性があります。

それで...

... $(selector).on('click', function(){}) の代わりに ... $(selectors parent).on('click', selector, function(){}) を実行します。

それは .live() への非常にきちんとしたアップグレードです

function singleClick(e) {
    // do something, "this" will be the DOM element
}

function doubleClick(e) {
    // do something, "this" will be the DOM element
}

$('selector-parent').on('click', 'selector', function(e) {
    var that = this;
    setTimeout(function() {
        var dblclick = parseInt($(that).data('double'), 10);
        if (dblclick > 0) {
            $(that).data('double', dblclick-1);
        } else {
            singleClick.call(that, e);
        }
    }, 300);
}).on('dblclick', 'selector', function(e) {
    $(this).data('double', 2);


doubleClick.call(this, e);
});
于 2013-04-04T15:26:56.947 に答える