0

このようなものがある場合:

someVar.click(function() {
  $(this).something.happens.here;
  $(this).something.else.happens.here;
  $(this).something.happens.here.that.should.only.run.once;
});

関数内の 3 行目をページで 1 回だけ実行することは可能ですか? 私が思いつくことができる唯一の解決策は、別のものを書くことです:

someVar.one( "click", function() {
      $(this).something.happens.here.that.should.only.run.once;
    });

しかし、ほとんどの場合、最初のクリック スコープで既に変数が定義されているため、すべてを 1 つの関数にまとめたいので、これはしたくありません。みんなありがとう。

4

5 に答える 5

1

同じ関数で必要な場合は、フラグを使用できます。

var shouldRun = true;
someVar.click(function() {
  $(this).something.happens.here;
  $(this).something.else.happens.here;
  if (shouldRun) {
    $(this).something.happens.here.that.should.only.run.once;
    shouldRun = false;
  }
});
于 2013-10-31T14:40:27.510 に答える
0

これはあなたのためにそれを行う必要があります:

var handled = false;

someVar.click(function() {
  $(this).something.happens.here;
  $(this).something.else.happens.here;
  if(!handled){
      $(this).something.happens.here.that.should.only.run.once;
      handled = true;
  }

});
于 2013-10-31T14:46:23.603 に答える
0
var track=true;

someVar.click(function() {
  $(this).something.happens.here;
  $(this).something.else.happens.here;
  if(track)$(this).something.happens.here.that.should.only.run.once;
  track=false;
});
于 2013-10-31T14:41:30.350 に答える
0

あなたが言ったように、イベントを添付するのoneが最もエレガントな解決策です。または、グローバル変数を設定して、関数が既に実行されているかどうかを示すこともできます。

var functionHasRun = false
someVar.click(function() {
    $(this).something.happens.here;
    $(this).something.else.happens.here;
    !functionHasRun && $(this).something.happens.here.that.should.only.run.once;
    functionHasRun = true;
});

dataグローバルのファンでない場合は、イベントを発生させた要素に属性を設定できます。

someVar.click(function() {
    $(this).something.happens.here;
    $(this).something.else.happens.here;
    !someVar.data('functionHasRun') && $(this).something.happens.here.that.should.only.run.once;
    someVar.data('functionHasRun', true);
});
于 2013-10-31T14:40:29.707 に答える