mam ładowania okna dialogowego z formularza, który jest zbudowany na locie przy użyciu Bootbox.js a ja walidacji danych wprowadzanych przez użytkownika za pomocą jQuery sprawdzania poprawności wtyczkę.jQuery .validate() submitHandler nie wypalanie
Validation działa dobrze, ale submitHandler
jest ignorowany, gdy formularz jest wypełniony poprawnie.
Co się dzieje źle?
submitHandler: function(form) {
alert("Submitted!");
var $form = $(form);
$form.submit();
}
Zobacz pełny przykład poniżej. Przyjrzałem się innym postom, w których podobny problem został poruszony. Niestety, wydaje się, że formularz jest renderowany na stronie, a ja renderuję mój via 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>
Naprawdę nie można usunąć 'submitHandler', ponieważ jest wbudowane w wtyczkę. Jednakże, używając niestandardowego 'submitHandler', dołączenie argumentu' form' bezpośrednio do 'submit()' pozwoli uniknąć błędów w nieskończonej pętli. Zobacz: https://jsfiddle.net/vyaw3ucd/5/ – Sparky
, to prawda, przechodzi w nieskończoną pętlę, chyba że dołączony jest argument formularza. Jednak nie dodanie parametru submitHandler wydaje się być równoważne z posiadaniem go w kodzie zgodnie z przykładem. Przetestowałem to w moim środowisku i działa zgodnie z oczekiwaniami, przesyłając formularz raz. jeszcze raz dziękuję –
Tak. Moje demo było po prostu wbudowanym domyślnym ... to był mój punkt widzenia. – Sparky