2011-12-18 9 views
2

フォーム検証のためのjqueryプラグインを作成しました。これは、$( 'element')。イベントを送信して検証をトリガーします(バインドはプラグインの中にあります)。検証プラグの内部jquery、バインディング注文/コールバック待ち

// pseudocode 
jquery.rdy { 
     $('form').validate(); //binding the plugin 
} 

私が提出し

//pseudocode 
[...] 
$().submit(function() { 
    validating... //returning true/false 

    if (false) { 
     return false //prevent submit form 
    } 
} 
[...] 

に検証をバインドするので、今、私の質問は、私は(例えばjsの他のスクリプトで)に結合することができますどのようにある他のもの:どういうわけか、このような提出するだけではなく、検証が行われた場合。この

$('form').submit(function() { 
    if (validate plugin was executed) { 
     //do stuff like check if validation was returning a true and now do something else 
    } 
} 

のようなので、

がうまくいけば、私はそれが右...私の英語が最善ではないdescripedが、私は、コンクリートの可能性のようにしようと試みた(と私は願って、擬似コードは、同様に適切なアプローチです)

// EDIT:問題はより具体的な作り: は、私は次のような問題を解決する方法を把握しようとしている:(その非常に文脈の外になく、問題はまさにそこにある。) 私が持っています別の解散でトリガーされたコードに応じて何かをしているイベントを提出してください。

$('element').submit(function() { 
    if ($(this).hasClass('foo')) { 
     // do something 
    } 
}); 

$('element').submit(function() { 
    $(this).addClass('foo'); 
}); 

そして、最初の機能は、2番目の機能の前にトリガーされたために何もしません。これを解決するきれいな方法はありますか?たぶん私はタイムアウトイベントが必要です(私はそれらを憎む)?

答えて

0

さらに多くの関数をフォーム要素にカスタム名でバインドできます。

$('form').bind('after_validation',function(){ console.log('hello'); }); 

そして、あなたがそれを必要とするあなたの投稿フォーム機能でそれらをトリガ:更新

$('form').trigger('after_validation'); 

​​


あなたは茶はできません.unbind('submit')を削除せずに正しい送信順で再送信することで、送信済みの送信イベントの順序を変更することができます。あなたができることはカスタムバインド(上記を参照)を使用し、必要なときに正確にトリガーすることです(例えば、submit関数内で)。あなたがチェーンをそれらをアクセスできるように「形式」要素に変数を格納するために.data()を使用して

$('form').submit(function() { 
    //run validation 
    $('form').trigger('validation'); 

    //did it pass validation? 
    if($(this).data('invalid')){ 
     console.log('did not pass validation'); 
     return false; 
    } 

    //passed validation - submit the form 
    return true; 
}); 

//add validation to the "form" 
$('form').bind('validation',function() { 

    //do validation on form... 

    if(false){ 
     $(this).data('invalid',true); 
    } 
}); 



//add another validator to the form, etc. 
$('form').bind('validation',func... 

イム。

これは必要なものの基礎であり、カスタムjqueryプラグインに適用してカスタム名付き関数を作成できます。例えば。 $().validator()

http://docs.jquery.com/Plugins/Authoring

+0

そうすることができますが、私はこの中にすべての私の文を宣言しない必要があります()構文を)検証し、あなただけのはisValid()メソッドを呼び出すことができます検証後に機能する。私はそれのようなものを望んでいない(jsの呼び出し関数の考えも)。 私のものをやっている通常の送信イベントが欲しいです。しかし、ちょうど私はいくつかのものが完了したときにこの提出イベントが実行されていることを確認したい(私の場合は、自分の仕事をしたバリデーションプラグ)。だから、私のプラグでフォームに "無効な"クラスを追加し、 "if!hasclass(無効)"のような2番目のサブミットイベントでチェックすることができますが、これは、遅くまで実行されます – user1104419

+0

私はそれをより理解しやすくするために私の質問を編集しました – user1104419

+0

上記の更新を参照してください –

1

あなたがしているように見えるjQuery.Validateを(使用している場合。「

if (validate plugin was executed) { 

が、その後うまくいく

if ($('form').isValid()) { 
+0

はい、私はプラグインでフォームを確認するためにそのようなことをすることができます。しかし、私はそれを確認したくない。とにかく、プラグインの内側のトリガーform.submit関数によってフォームが検証されているからです。ポイントは...プラグインが遅く始まるバリデーションの進捗状況です。単純に - 私は提出時に2つのバインドを持っていますが、私はバリデーションプラグが最初に、そしてその後にもう1つが開始されていることを確認したいと思います。だから私は2番目の提出バインドの内側には、検証が前に行われている場合は、参照をバインドしたい。うーん、英語で説明するのは難しいですが、私は私を得ることを願っています! – user1104419

+0

私の質問を編集して理解しやすくしました – user1104419

関連する問題