0

これを簡単に回避できることはわかっていますが、この場合のベストプラクティスを探しています。これは簡易版http://jsbin.com/isered/3/editです。再利用する関数を作成しようとしていますが、イベントがトリガーされたとき (つまり、アンカー タグをクリックしたとき) に、関数が呼び出されるたびにではなく、出力領域を 1 回だけ追加する必要があります。

Jquery/Javascript

$(function () {

   function foo () {
      $('a').on('click', function () {
      $('.asdf').append('poo');
    });
   }

   foo ();
   foo ();
});

HTML

<a href='#'>hello</a>
<a href='#'>world</a>

<p class='asdf'></p>
4

5 に答える 5

2

状態変数、この場合はクラスを作成できます。

$(function () {
  function foo() {
    $('a:not(.clicked)').on('click', function() {
      $(this).addClass('clicked');
      $('.asdf').append('poo');
    });
  }

  foo();
  foo();
});
于 2012-07-13T00:16:34.300 に答える
2

イベントをバインドする前にバインドを解除できます。

function foo () {
  $('a').off('click').on('click', function () {
      $('.asdf').append('poo');       
  });
}

関数を1回だけ呼び出すことが最善の解決策ではない理由はわかりませんが。

于 2012-07-13T00:17:10.937 に答える
1

通常、コンテナを 1 回だけ作成したいが、その後のクリックでも残りの関数を処理したい場合に、これに遭遇します。その場合、次のようにコンテナの存在を確認します。

var foo = function(){
    $('a').on('click', function(ev){
       if (!$('.asdf .foo').length) {
           $('.asdf').append('<div class="foo">');
       }
       // do other click stuff here
    });
};
于 2012-07-13T00:20:51.053 に答える
0

Underscore.js には既にこの機能があります。

では、なぜ車輪を再発明するのでしょうか。

_.once(function) 1 回だけ呼び出すことができるバージョンの関数を作成します。変更された関数を繰り返し呼び出しても効果はなく、元の呼び出しの値が返されます。ブール値フラグを設定して後でチェックする代わりに、初期化関数に役立ちます。

例:

$(function () {

  var foo = _.once(function() {
    $('a').on('click', function () {
      $('.asdf').append('poo');       
    });
  });

  foo ();
  foo ();
});
于 2012-07-13T00:17:22.137 に答える
0
$(function () {
    function foo () {
        $('a').on('click', function () {
            var num = $('.asdf').text().length;
            if (num == 0) {
                $('.asdf').append('poopsicles');
            }
        });
    }

    foo();
    foo();
});

この質問はすでに回答されていると思いますが、どうぞ。

于 2012-07-13T00:37:21.487 に答える