2

アンカーの配列があり、それぞれにイベントをバインドしています:

$j('.opts a').live("click", function(e){}) ;

このクリックイベントが終了するまで、他のアンカーをクリックできないようにしたいと思います。

$j('.opts a').live("click", function(e){
  $j('.opts a').unbind('click'); 
  //do something
  $j('.opts a').bind('click');
});

これは私が試したことのほんの一例ですが、バインドを解除しても機能しません。

4

3 に答える 3

2

ここでは、jQueryが正しいツールではないと思います。あなたの問題は、JavaScriptが何かをしている間にイベントがキューに入れられることです。

したがって、本当に必要なのは、「戻ったときに、キューに入れられたすべてのクリックイベントを飲み込む」などです。

クリックハンドラーの再バインドを新しい関数に移動し、タイマーで呼び出すことをお勧めします。これにより、ブラウザはキューに入れられたイベントを処理できます。

また、バインドを解除することも間違ったアプローチである可能性があります。常に同じハンドラーを使用している場合は、それを次のskipプロパティを持つオブジェクトに変換します。

skip: false,
run: function( e ) {
    if (this.skip) return;

    this.skip = true;

    ... do something ...

    var self = this;
    setTimeout( function() { self.skip = false; }, 50 );
}

[編集]別の方法:すべてのリンクが1つのHTML要素(親divなど)にある場合は、その要素のクリックハンドラーをインストールして何もしないようにすることができます。それはまたクリックイベントを飲み込むでしょう。関数から戻った後にイベントが確実に処理されるようにするには、タイムアウトハンドラーが必要です。

于 2012-08-08T14:20:23.110 に答える
2

リンクをクリックできないようにすることはできません。登録した JS イベントのみバインドを解除できます。必ず を呼び出す必要がありますpreventDefault()。そうしないと、リンクが の後に続きますhref

このようなことを試してください。

var isDoingSomething = false;
$j('.opts a').on('click', function (e) {
    e.preventDefault();
    if (!isDoingSomething) {
        isDoingSomething = true;
        // do something
        isDoingSomething = false;
    }
});

お役に立てれば。

于 2012-08-08T14:13:12.553 に答える
0

悪い->

$j('.opts a').live("click", function(e){
  $j('.opts a').unbind('click'); 
  //do something
  $j('.opts a').bind('click');
});

良い->

$j(document).on("click", '.opts a', function(e){
  $j('.opts a').off('click'); 
  //do something
  $j('.opts a').on('click', //a function such as 'myClickFunction' referencing what you want to occur.);
});
于 2012-08-08T14:13:14.390 に答える