2012-02-20 10 views
0

私はプロジェクトに取り組んでいて、フィールドに入力されたユーザー入力データの存在を検出しようとしました。私はこれがなぜ起こっているのか困惑しています。フィールド内の値の存在が正しく動作していない

私が書いたルーチンはこれです。

$(document).ready(function() { 
    $('#salary_bal').on('change blur keydown', function() { 
    if($(this).val.length === 0 || $(this).val() === '') { 
     setSubmitState('off'); 
    } else { 
     setSubmitState('on'); 
    } 
    }); 
}); 

function setSubmitState(state) { 
    switch(state) { 
    case 'on': 
     $('#fsSubmit').attr('disabled', false); 
     $('#fsSubmit').addClass('button'); 
     $('#fsSubmit').addClass('cursor'); 
    break; 
    case 'off': 
     $('#fsSubmit').attr('disabled', true); 
     $('#fsSubmit').removeClass('button'); 
     $('#fsSubmit').removeClass('cursor'); 
    break; 
    } 
} 

あなたはおそらくsetSubmitStateコールで推測することができたようバインドされたフィールドに値がない場合、それはフォームの送信ボタンを無効にする必要があります。

私が言ったように、これは正しく動作する「ソー」です。それは、新しくキー入力された文字ではなく、以前の文字に応答しているように実際に動作していることです。

ここでは、動作シーケンスとそれぞれの結果を示します。

  1. フィールドに「x」を1つ入力します。
    • 送信ボタンが有効になりません。
  2. フィールドに別の「x」を入力します。
    • 送信ボタンが有効に変更されます。
  3. 'x'をバックスペースで削除します。
    • 送信ボタンは有効のままです。
  4. 再びフィールドを空にします。
    • 送信ボタンは有効のままです。
  5. バックスペースもう一度。
    • 送信ボタンが無効になります。

私はこれをデバッグしようとして壁に頭を強打されていると、私のホイールを回転さにうんざりして取得しています。 (壁からの頭痛は言うまでもありません)誰もこの問題の解決策を提供できますか?

+0

キーアップはキーアップにする必要があります。したがって、イベントは新しく挿入された文字の後に発生します。 Keydownはキーアップの前に起動し、キーアップ後に文字に入力されます。 –

+0

私がkeyupを使用すると、そのような関数が存在しないことを示すエラーが表示されます。 – Skittles

+0

それを傷つける。 O.o私はなぜそれが働いたのか分かりません。以前は本当にそのエラーが出ていましたが、今はそうではありません。それはちょうどナッツです。ありがとう – Skittles

答えて

0

キーアップはキーアップにする必要があります。したがって、イベントは新しく挿入された文字の後に発生します。 Keydownはキーアップの前に起動し、キーアップ後に文字に入力されます。

関連する問題