Webユーザーコントロールにクライアント側(JQuery JavaScript)検証を追加したいだけです。 OnClientClickハンドラーを配置すると、関数が呼び出されます。しかし、「false」を返しても、OnClickメソッドは常に発生します。何が悪いのですか?
私はVS 2010で、4.0フレームワークをJQuery 1.4.2でターゲットにしています。およびJQuery UI 1.8.4。
これがサンプルコードです:
<td style="text-align:right"><asp:Button ID="btnAddSave" OnClientClick="return ValidateMail();" OnClick="btnAddSave_Click" runat="server" Text="Submit" /></td>
スクリプト方式:
function ValidateMail() {
alert("Bouton clicked");
return false;
}
Page_Loadイベントにブレークポイントを設定すると、そこに移動してbtnAddSave_Clickイベントも実行されることがわかります。
true
を返すクリックイベントハンドラー(jqueryで登録)はありますか?その場合、OnClientClick
の戻り値は無視されます。
私の質問(と回答)を見てください: OnClientClickからfalseが返されない理由ポストバックをキャンセルします
何らかの理由で、jqueryイベントハンドラーをアタッチしていませんでしたが、機能しませんでした。
実際に機能したのは:
OnClientClick="if (validate_form() == false) return(false);"
素晴らしい答え。私はこのようにします。同じ結果-Java関数からfalseが返された場合、OnClickイベントは発生しません。
OnClientClick = "if (!ValidateDelete()) return false;"
OnClick="btnDeleteSupplier_Click"
に変更してみてください
OnClientClick="ValidateMail(); return false;"
javascript:
を追加するだけです
例:
javascript:return ValidateMail();
私がASP.NET WebフォームでHTMLボタンを使用していて、コードを実際の例で置き換える必要がある理由を見つけることができなかったという理由だけで、この答えを書いています。これが機能しない理由の解決策です。それが私を助けたのをチェックするような問題があなたが問題を理解するのに役立つことを願っています。これは私の最初の投稿なので、スタイルのために申し訳ありません。
<button type="button" id="buttonAddOrEdit" class="btn btn-success" runat="server" onclick="return myValidate()" onserverclick="buttonAddOrEdit_ServerClick">Zapisz</button>
そしてjavascript関数:
function myValidation() {
if (validator.form()) {
//Project logic
return true;
}
else return false;
};
正しい検証後にクライアント側のクリックを使用しても、ボタンにバインドされたサーバー側でイベントがトリガーされませんでした。コードの一部を次のように変更するための解決策:
onclick = "if(!myValidation())return;"
Onserverclickでページにレンダリングされたhtmlが作成される方法のために機能します。 HTMLボタンのOnserverClickは、JavaScriptの__doPostBackメソッドに置き換えられています。クライアント側でレンダリングされるHTMLボタンのフルコードは次のようになります。
<button onclick="return myValidation(); __doPostBack('ctl00$PortalContent$buttonAddOrEdit','')" id="ctl00_PortalContent_buttonAddOrEdit" type="button" class="btn btn-success">Zapisz</button> Błąd składni
そしてそれをif文で置き換えた後。
<button onclick="if(!myValidation()) return; __doPostBack('ctl00$PortalContent$buttonAddOrEdit','')" id="ctl00_PortalContent_buttonAddOrEdit" type="button" class="btn btn-success">Zapisz</button>
Return myValidate();での作業__doPostBackの前に戻るため、イベントは発生しません。
次のコードを使用すると、必要に応じてボタンに別のコードを追加でき、問題は発生しません。