5

私は JS の初心者で、JQUERY セマンティクスの理解に問題があります。

セルの内容をチェックする関数を作成しました。

問題: セルがフォーカスを失ったときに関数が開始されます。[送信] をクリックすると、最初にエラーが表示され、次に関数が実行されます。

セル内にいても関数を実行したい。どうやってするの?

これによって開始されます:

$(".user_id").blur(function(){ validateUserId($('.user_id')); });

関数:

function validateUserId(reference) {
    if ( 5 == $(reference).val().length ) {
        $.get('index.php?user=' + $(reference).val(), function(data) {
            if ( "error" == data ) {
                $(reference).parent().parent().addClass('error');
                alert('error');
            } else {
                $(reference).parent().parent().removeClass('error');
                $(reference).addClass('valid');
                $(reference).parent().parent().addClass('success');
            }
        });
    } else {
        alert('short');
        $(reference).parent().parent().addClass('error');
    }
}
4

5 に答える 5

1

私はキーアップイベントを使用します。したがって、誰かが入力セルにキーを入力するたびに、関数が実行されます。

 $(".user_id").on("keyup", function(){ validateUserId($(this)); });

$(".user_id") を変更しました。値を , から $(this) に変更します。キーアップイベントを実行したフィールドの値が必要なので。(同じ .user_id クラスのフィールドが 2 つある場合は、他のフィールドではありません。)

于 2012-05-14T12:14:16.540 に答える
0

これは動作中のデモhttp://jsfiddle.net/pomeh/GwswM/です。コードを次のように少し書き直しました。

  • DOM 選択を変数にキャッシュします。
  • jQuery メソッド チェーンを使用し、
  • ifトライプ等号で状態を改善し、
  • AJAX 呼び出しとアプリケーション ロジックを分離し、
  • 同一の AJAX 呼び出しをキャッシュし、
  • jQuerydeferredを使用して、検証の非同期の側面を非表示にします (AJAX にリンク)

それが役立つことを願っています:)

于 2012-05-14T16:07:05.213 に答える