2010-11-22 24 views
0

私は自分のJQueryの検証をしたフォームを持っています。 JQuery <button id=btnRegister type=submit>をクリックすると、私の検証コードが呼び出され、無効な場合、フォームは送信されません。すべての作品は素晴らしいです。JQuery <button> onclick()およびonserverclick()を使用します。ありえない?

私はこのフォームに別の<button id=btnSave>を持っています。 フォームデータが有効な場合のみ、btnSaveがasp.netサーバーサイドイベント(onserverclick)を起動するようにします。

私は、次の試してみました - 私はbtnSaveをクリックすると <button type=submit onclick='if($(this).closest('form').submit()==false) return;' onserverclick='btnSave_click' runat =server>Save</button>

は、それが無効の場合は正しく、falseを返し、私のフォームの提出イベントハンドラを呼び出すん。ここまでは順調ですね。この後、onserverclickイベントは、トリガーではありません。ただし、フォームが無効であっても、onserverclickがトリガーし、ページがポストバックします。

私が見ているように、onclickとonserverclickを同時に持つことはできません。 私はそれらを調和的に共存させるために何をすべきですか? <button><input type=submit>に変更するとすべて機能します。でも、私は<button>のルック・アンド・フィールが好きです。

答えて

1

ポストバックを防ぐには、JS関数がfalseを返すようにしてください。上記のコードでは、あなたのテストはfalseになっていますが、falseを返すことはありません。

<button type=submit onclick='if($(this).closest('form').submit()==false) return false;' onserverclick='btnSave_click' runat =server>Save</button> 
+0

trueを返すとポストバックはしませんが、私はonclickが常にfalseを返すようにしたくありません。入力が有効な場合はtrueを返します。私はsubmit()関数の値を返そうとしましたが、[object object]を返します。だから、私の質問を言い換える必要があります - どのように私のsubmit()関数の戻り値を得るには – tubelight

+0

アラート($(this).closest( 'form')。submit())はtrue/falseではなく[object]を返します。フォームのsubmit関数から戻り値を取得するにはどうすればよいですか? – tubelight

+0

イベントハンドラは常に、イベントのデフォルトが発生するかどうかを示す 'ブール値 'を返します。デフォルトの「送信」動作が発生しないようにする場合、つまりポストバックの場合、入力が有効かどうかにかかわらず、 'false'を返すべきです。 – Domenic

0

ドメニク、thxですが、その点はそれを超えています。私のonclickコードで、フォームの送信ハンドラの戻り値(trueまたはfalse)を取得するにはどうすればよいですか? var sts=myFunc(){return true/false;}は、stsをtrue/falseに設定します。 var sts = $(this).closest('form').submit()はtrue/falseではなくstsを[object]に設定します。したがって、フォームの送信ハンドラがボタンのonclickでtrue/falseを返すかどうかはわかりません。これはボタンとオンクリックの基本的な使い方のように思えるので、私は間違ったトラックにいなければなりません。

回避策が見つかりました。代わりに行うので -

<button onclick='if($(this).closest('form').submit()==false) return false;'> 私は今 - <button onclick='if($.fn.validate()==false) return false;'

$(this).closest('form').submit()は提出がtrueまたはfalseを返し、ユーザの入力に基づいてフォームを送信します。しかし、私はまだonclickコードでその戻り値にアクセスする必要はありません。だから問題は残っている。この問題を回避するために、私は今onclickにフォームのサブミットハンドラの代わりにvalidate()関数を呼び出すようになっています。私のvalidate()関数は、通常の関数としてtrue/falseを返します。 falseの場合はonclick、asp.netの場合は__doPostback()関数に戻ります。

回避策にも利点があります。フォームが有効な場合、以前の試みでは、自分の.submit()呼び出しとasp.netからの__dopostbackを経由してフォームを2回送信します。振り返ってみると、私はあまりにも素朴すぎていた。学んだ教訓。

関連する問題