2017-04-19 15 views
1

私はこの午後中に苦労していました。条件が偽であってもコードが実行されます

ストレートポイントに。私はそれが新しい変数を設定し、一方、入力フィールド内のいくつかの変更がない限り、正しく上記のコードはif声明を進めることを理解していれば

// On document ready 
$(function() { 
    var stop = false; 
    $('#update-cart :input').on('change input', function() { 
     // Here you go 
     stop = true; 
    }); 

    if (stop === false) { 
     // For some(silly) reason It gets executed on input field change 
    } 
}); 

。したがって、ifの条件はfalseのままです。条件が偽であれば、なぜそれが実行されるのか分かりません。私は行方が間違っているかもしれません。

+1

'stop = true'はイベントハンドラ内にあります。入力が変更されたときにのみ実行されます。あなたのコードは次のとおりです:1 set stop = false、2後で実行するイベントハンドラを開始します。3 stopがfalseであることを確認します。これは明らかです。 –

+1

最初は常にfalseです。条件を変更するだけで評価したい場合は、内部のif文を移動してください。 – DaniP

+1

@DaniPありがとう!私は両方が必要です。 –

答えて

5

のコードだけが、イベントが発生したときにハンドラが実行され、再実行されます。

  1. stop変数を作成し、falseに設定します。

    はここにあなたのコードが実行されているためです。

  2. ハンドブックをchangeinputハンドブックします。

  3. if (stop === false)をチェックしてください。それが正しいので、ifのブロック内のコードを実行してください。

  4. 値が変更されるたびに、stoptrueに設定します。ステップ#3で実行されたコードには何の効果もありません。

+0

私はまたプロセスをコンソールに記録していましたが、これが注文です。 'if'文の実行を止める方法に関するポインタや回避策はありますか? –

+1

@ 'if'ステートメントは継続的に実行されません。** if **は、その関数がjQueryの' ready'ステートメントによって呼び出されると**実行されます**。別の時間に呼び出したい場合は、コードをそこに移動します。変更があるたびに 'ready'が発生する*と*の両方を実行する必要がある場合は、それを関数に置き、その関数を両方の場所から呼び出すことをお勧めします。 –

関連する問題