1

以下の例を参照してください。基本的に、最初のクリックで実行し、その後のすべてのクリックでelseステートメントを実行しますが、変数が更新されていても、アラートメッセージが変数は現在3になっていますが、それでも他の変数には移動しません。スコープの問題だと思いますが、どうすれば回避できますか?誰かアドバイスできますか?

var loaded = 0;

if (loaded == 0) {
$('body').on('click', '#button', function(){
alert(loaded);
loaded += 1;
});

} else {
alert(loaded + 'yay its not 0');
};
4

5 に答える 5

1

これは、うまくいけば意図したとおりに動作するはずです。

$(document).ready(function() {
    var clicked = false;
    $('body').click(function() { 
        if(clicked) {
            alert("Already clicked");
        } else {
            alert("Not clicked yet");
            clicked = true;
        }
    });
});

お役に立てば幸いです。

于 2013-03-06T15:47:52.690 に答える
0

if条件は1回だけ実行されます。クリックイベント内にチェックを入れてみてください。

var loaded = 0;
$('body').on('click', '#button', function () {
    if (loaded == 0) {
        alert(loaded);
        loaded += 1;
    } else {
        alert(loaded + 'yay its not 0');
    };
});

jsFiddleの例

于 2013-03-06T15:45:42.110 に答える
0

割り当てられたイベントは、事後に使用.oneまたは手動で呼び出さない限り、常に実行され.offますが、それでも、クリックが発生したときではなく、スクリプトがロードされたときにチェックが実行されるのは1回だけです。イベントハンドラー内でif/elseを処理する必要があります。

var loaded = 0;
$('body').on('click', '#button', function(){
   if(loaded === 0) {
      alert(loaded);
      loaded += 1;
   } else {

   }
});
于 2013-03-06T15:45:58.487 に答える
0

クリックハンドラー内にチェックを入れます。

  $('body').on('click', '#button', function(){
      if(loaded == 0){
          alert(loaded);
          loaded += 1;
      }
      else{
         alert(loaded + 'yay its not 0');

      }
   });
于 2013-03-06T15:46:18.803 に答える
0

ステートメントは最初ifにのみ実行され、その後、on()メソッドを入力して関数をにバインドしますが#button、その後は他の評価はありません。この場合、の初期値が0でないelse場合にのみ、その部分に移動します。loadedコードを次のように変更する必要があります。

$('body').on('click', '#button', function(){
if (loaded == 0) {
  alert(loaded);
loaded += 1;
  } else {
alert(loaded + 'yay its not 0');
  }
});
于 2013-03-06T15:46:18.833 に答える