7

このフィドルに示されているように、クラスサブナビがある場合、デフォルトのアンカーを無効にします。

最初のクリックでこれを無効にするだけで、通常のアンカー機能を元に戻すことができます。これを行う最善の方法は何ですか?私は以下のコードを含む何かを試しましたが、これはうまくいかないようでしたか?

  $(this).unbind(event.preventDefault());

たぶん、この疑似コードのようなものですか?

if (click count === 0 ) {
    event.preventDefault();
}

またはこれにアプローチするより良い方法はありますか?

4

5 に答える 5

9

イベント ハンドラーをone()docuにバインドします。一度実行すると、その後自動的にアンバインドされます。

$(".subnav a").one("click", function(event) {
  event.preventDefault();
});

または、関数内で直接アンバインドすることもできます。そのために名前空間を使用するのは良いことです

$(".subnav a").bind("click.myclick", function(event) {
  event.preventDefault();
  $(this).unbind(".myclick");
});
于 2012-08-02T07:34:23.747 に答える
9

これはうまくいきます。2 回目のクリックでページに移動します...

$(".smallNavigation > ul > li > a").click(function (e) {

    $("ul.sub-menu").hide();
    $("ul.sub-menu", $(this).parent("li")).show();

    e.preventDefault();
    $(this).unbind(e);

}
于 2015-12-30T22:12:53.750 に答える
7

one()に渡すことができfalseます:

$(".subnav a").one("click", false);

ハンドラーの代わりに渡すことは、falseを返すハンドラーを渡すことと同じでありfalse、イベントの伝播を効果的に停止し、デフォルトの動作を防ぎます。

これはbind()のドキュメントで説明されています:

falsejQuery 1.4.3 では、イベント ハンドラーの代わりに渡すことができるようになりました。これにより、次のイベント ハンドラーがバインドされますfunction() { return false; }

于 2012-08-02T07:37:30.173 に答える
1

クリック ハンドラで self unbind のような単純なものを使用できます。

何かのようなもの

function stopEventOnce(event) {
  event.preventDefault();
  $(this).unbind('click',stopEventOnce);
  return false;
}
$(".subnav a").bind('click', stopEventOnce);

修正されたフィドル

于 2012-08-02T07:38:41.537 に答える
0

これはあなたのために働くでしょう

$("#elementid").bind("click", function( event ) {
  alert("This will be displayed only once.");
  event.preventDefault(); 
  $(this).unbind( event );
});
于 2012-08-02T07:36:32.503 に答える