[解決済み] jQuery .validate() submitHandler が起動しない
質問
を使用してオンザフライで作成されたフォームでダイアログボックスを読み込んでいます。 Bootbox.js そして、jQuery validateプラグインでユーザーの入力を検証しています。
バリデーションは問題なく動作しますが
submitHandler
は、フォームへの入力が成功した場合、無視されます。
何が問題なのでしょうか?
submitHandler: function(form) {
alert("Submitted!");
var $form = $(form);
$form.submit();
}
以下の完全な例をご覧ください。同じような問題が提起されている他の投稿も見てみました。残念ながら、彼らはフォームをページ上にレンダリングしているようですが、私はjQuery経由でレンダリングしています。
$(document).on("click", "[data-toggle=\"contactAdmin\"]", function() {
bootbox.dialog({
title: "Contact admin",
buttons: {
close: {
label: 'Close',
className: "btn btn-sm btn-danger",
callback: function() {}
},
success: {
label: "Submit",
className: "btn btn-sm btn-primary",
callback: function() {
$("#webteamContactForm").validate({
rules: {
requestType: {
required: true
}
},
messages: {
requestType: {
required: "Please specify what your request is for",
}
},
highlight: function(a) {
$(a).closest(".form-group").addClass("has-error");
},
unhighlight: function(a) {
$(a).closest(".form-group").removeClass("has-error");
},
errorElement: "span",
errorClass: "help-blocks",
errorPlacement: function(error, element) {
if (element.is(":radio")) {
error.appendTo(element.parents('.requestTypeGroup'));
} else { // This is the default behavior
error.insertAfter(element);
}
},
submitHandler: function(form) {
alert("Submitted!");
var $form = $(form);
$form.submit();
}
}).form();
return false;
}
}
},
message: '<div class="row"> ' +
'<div class="col-md-12"> ' +
'<form id="webteamContactForm" class="form-horizontal" method="post"> ' +
'<p>Please get in touch if you wish to delete this content</p>' +
'<div class="form-group"> ' +
'<div class="col-md-12"> ' +
'<textarea id="message" name="message" class="form-control input-md" rows="3" cols="50">This email is to notify you the creator is putting a request for the following item\n\n' +
this.attributes.getNamedItem("data-url").value + '\n\n' + '</textarea> ' +
'<span class="help-block">Feel free to change the message and add more information. Please ensure you always provide the link.</span> </div> ' +
'</div> ' +
'<div class="form-group requestTypeGroup"> ' +
'<label class="col-md-4 control-label" for="requestType">This request is for:</label> ' +
'<div class="col-md-4"> <div class="radio"> <label for="Edit"> ' +
'<input type="radio" name="requestType" id="requestType-0" value="Edit"> ' +
'Editing </label> ' +
'</div><div class="radio"> <label for="Delete"> ' +
'<input type="radio" name="requestType" id="requestType-1" value="Delete"> Deletion</label> ' +
'</div> ' +
'</div> </div>' +
'</form> </div> </div>'
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/bootbox.js/4.4.0/bootbox.min.js"></script>
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css" rel="stylesheet" />
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>
<script src="https://ajax.aspnetcdn.com/ajax/jquery.validate/1.13.0/jquery.validate.js"></script>
<a data-toggle="contactAdmin" data-title="help" data-url="http:/www.mydomain.com/some-url" href="#">Contact Web team</a>
解決方法は?
jsFiddleのDOMを検査すると、2つの問題が明らかになる。
-
あなたの"submit"。
<button>
はtype="button"
. -
送信ボタンが
<form></form>
のコンテナを使用します。
jQuery Validate プラグインに、自動的に
click
イベント(submit" ボタン)...
-
は、ボタンが
type="submit"
-
ボタンは
<form></form>
コンテナに格納されます。
この2つの条件は、プラグインを意図したとおりに動作させたい場合に満たす必要があります。
また
.validate()
メソッドを
success
モーダルダイアログボックスの "submit" ボタンのコールバック。
は
.validate()
メソッドは
初期化
と呼ばれる必要があります。
一度だけ
を、フォームが作成された後に実行します。
EDIT :
これを弄った後、明らかになるのは Bootbox モーダルプラグイン は、フォームの送信を妨害するいくつかの重大な制限がある可能性があります。
-
Validateプラグインを初期化しています。 後 ダイアログが開かれます。
-
を使っています。
.valid()
メソッドで検証テストをトリガーします。
バリデーションを初期化して正常に動作させることはできますが、実際のフォーム送信が行われる前にダイアログが解除されてしまいます。 おそらく解決策があるのでしょうが、Bootbox のドキュメントを見ても、なかなか明らかにはなりません。
https://jsfiddle.net/vyaw3ucd/2/
EDIT 2:
OPの解答の通り...。
bootbox.dialog({
// other options,
buttons: {
success: {
label: "Submit",
className: "btn btn-sm btn-primary",
callback: function () {
if ($("#webteamContactForm").valid()) {
var form = $("#webteamContactForm");
form.submit(); // form submits and dialog closes
} else {
return false; // keeps dialog open
}
}
}
}
});
しかし、単に提供された
form
の引数を直接指定しても、エラーは発生しません。
submitHandler
オプションを使用します。
submitHandler: function (form) {
console.log("Submitted!");
form.submit();
}
関連
-
[解決済み] jQueryのif文でのOR演算子の使用について
-
[解決済み] jQueryで要素が非表示になっているかどうかを確認するには?
-
[解決済み] jQueryでチェックボックスに "checked "を設定する
-
[解決済み] jQueryの「exists」関数はありますか?
-
[解決済み] どのラジオボタンが選択されているかをjQueryで知るにはどうしたらよいですか?
-
[解決済み] jQueryでページを更新するにはどうすればよいですか?
-
[解決済み] jQueryでテーブルの行を追加する
-
[解決済み] jQueryで要素にスクロールする
-
[解決済み] jQueryを使用しない$(document).ready相当
-
[解決済み】jQueryでチェックボックスがチェックされているかどうかを確認するにはどうすればよいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Jquery.comのサイトのソースファイルはどこにあるのでしょうか?ダウンロードのリンクがないのですが
-
[解決済み] ファイルをホストせずにホットリンクできるjQueryのバージョンはどこかにあるのでしょうか?
-
[解決済み] jqueryでドロップダウンボックスを有効化/無効化する
-
[解決済み] AJAXを同期させる(SJAX)にはどうすればよいか
-
[解決済み] jQuery On Clickが動作しない
-
[解決済み] jQueryのinit関数を設定する
-
[解決済み] jQueryでborder-bottomの色を変更する?
-
[解決済み] フォーム送信のjQueryが動作しない
-
[解決済み] jQuery Mobileのボタンを無効にする
-
[解決済み] jqueryでラジオボタンを検証する?