2012-05-14 11 views
5

私はJSの新人です.JQUERYの意味を理解するのに問題があります。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'); 
    } 
} 
+0

何か入力すると意味はありますか? – VisioN

+0

潜在的なHTMLも興味深いでしょう、あなたが達成したいことはかなり確かではありません... – Peter

+0

多分あなたはkeyupを使用できますか? $( "。user_id"));}); $( "。 –

答えて

0

は、フォーカスイベント

+3

いいえいいえいいえいいえ... – VisioN

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

に機能をバインドするようにしてください私はからkeyupイベントを使用します。 誰かがあなたの入力セルにキーを入力するたびに、その関数が実行されます。

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

$( "user_id")を$から(this)に変更しました。フィールドの価値が必要なので、あなたはkeyupイベントを行いました。 (ではなく、他の分野、同じ.user_idクラスを持つ2つのフィールドが存在することになる場合。)あなたの問題に

0
$("input[submit]").click(function(e){ 
    e.preventDefault(); 
    var valid = validateUserId($('.user_id')); // maybe the function could return a boolean value too instead of just adding classes to the HTML part 
    if (valid) { 
     $("#your_form_id").submit(); // only if the input is valid, submit it 
    } 
}); 

追記:あなたが送信ボタンをクリックした場合、それは最初にあなたを与えることが送信アクションをトリガーしますエラーとを次にblur()コードブロックを実行

0

ここでは、デモの作業http://jsfiddle.net/pomeh/GwswM/です。 AJAXコールとアプリケーションロジックを分離胃袋等号とif条件、

  • を向上させる変数、連鎖する
  • 使用jQueryの方法、
    • キャッシュDOMの選択:私は、コードを少し書き換えました、
    • キャッシュは同一でAJAXは、
    • 使用のjQuery deferred検証の非同期態様を非表示にする(AJAXに連結された)
    • コール

    希望するもの: