0

リソースが読み込まれるまで有効にしないでください。私のアイデアは、ボタンを.disabledクラスで初期化し、リソースの準備ができたら削除することでした。それまでの間.disabled、他のハンドラーへのイベントの伝播を防ぐクリック イベントのハンドラーが必要です。

問題は、ハンドラーを最初に追加しても.disabled、他のクリック ハンドラーの前に起動できないことです。

$( "body" ).on('click','.disabled', function(e) {
        alert('disabled');
        e.stopImmediatePropagation();
        return false;
});
$('.clickable').click(function(e) {
     alert('enabled');   
});
// Call this when ready:
//$('.clickable').removeClass('disabled');

フィドル: http://jsfiddle.net/4rJxU/7/

.clickableこれは、おそらく委任されたイベントが要素の親によってキャプチャされ、後で処理されるため、「有効」アラートが最初にポップアップし、次に「無効」アラートがポップアップしますか?

委任されたイベントを使用してクリック ハンドラーを無効にするにはどうすればよいですか?

4

2 に答える 2

1

実際のステータスを保持する変数を追加した方がよいのではないでしょうか?

var isLoaded = false;

$( "body" ).on('click', function(e) {
    if (isLoaded) {
        alert('enabled');   
    } else {
        alert('disabled');
        e.stopImmediatePropagation();
        return false;
    }
});

そして、trueすべての準備が整ったときに変更します。

于 2013-10-17T17:08:10.493 に答える
1

これは機能するはずです(無効化されたクラスは必要ありません):

var clickEnabled = false;

$('.clickable').on('click', function(e) {
    if (!clickEnabled) {
        alert('disabled');
        e.stopImmediatePropagation();
        return false;
    }
    else {
        alert('enabled');
    }
});

...そして、必要なものが準備できたら、clickEnabledをtrueに設定するだけです。

フィドル: http://jsfiddle.net/ehFGX/

すべての準備が整ったらデフォルトのクリック ハンドラーを起動することだけが必要な場合は、上記の else ブロックを削除するだけで、ハンドラーが false を返さない場合はデフォルトで続行されます。

無効なクラスを引き続き使用する場合は、!clickEnabled をチェックする代わりに、$(this) にそのクラスがあるかどうかをチェックできます。

于 2013-10-17T17:17:56.637 に答える