我有一个表单可以很好地“点亮”验证消息,并在通过验证时将“保存”按钮更改为“正在加载...”。一切都好。
但是,表单永远不会提交。
我想我缺少基本的东西。
$("#btnSave").on("click", function() {
if ($("#formMain").valid()) {
var btn = $(this);
btn.button('loading'); //This works and fires when the form is valid
setTimeout(function() {
btn.button('reset');
}, 3000);
$("#formMain").submit(); //FireBug says this is hit, but nothing happens
}
});
如果是我的验证器,这里仅供参考:
var CloudFormValidation = function () {
var handleValidation = function() {
// for more info visit the official plugin documentation:
// http://docs.jquery.com/Plugins/Validation
var form2 = $('#formMain');
var error2 = $('.alert-danger', form2);
var success2 = $('.alert-success', form2);
form2.validate({
errorElement: 'span', //default input error message container
errorClass: 'help-block', // default input error message class
focusInvalid: false, // do not focus the last invalid input
ignore: "",
invalidHandler: function(event, validator) { //display error alert on form submit
success2.hide();
error2.show();
App.scrollTo(error2, -200);
},
errorPlacement: function(error, element) { // render error placement for each input type
var icon = $(element).parent('.input-icon').children('i');
icon.removeClass('fa-check').addClass("fa-warning");
icon.attr("data-original-title", error.text()).tooltip({ 'container': 'body' });
},
highlight: function(element) { // hightlight error inputs
$(element)
.closest('.form-group').addClass('has-error'); // set error class to the control group
},
unhighlight: function(element) { // revert the change done by hightlight
},
success: function(label, element) {
var icon = $(element).parent('.input-icon').children('i');
$(element).closest('.form-group').removeClass('has-error').addClass('has-success'); // set success class to the control group
icon.removeClass("fa-warning").addClass("fa-check");
},
submitHandler: function(form) {
success2.show();
error2.hide();
}
});
};
return {
//main function to initiate the module
init: function () {
handleValidation();
}
};
}();
答案 0 :(得分:1)
感谢Ostati和John S,你让我在合适的架子上。以下是我所做的改变:
我的提交按钮(只是一个)
$("#btnSave").on("click", function() {
$("#formMain").submit(); //Do this here to kick off the process
if ($("#formMain").valid()) { //If valid the plugin will submit for real
var btn = $(this);
btn.button('loading');
setTimeout(function() { btn.button('reset'); }, 3000);
}
});
然后我的提交处理程序:
submitHandler: function(form) {
success2.show();
error2.hide();
form.submit(); //Must be called here,
}
答案 1 :(得分:0)
尝试不同的提交机制
$(this).closest("form").submit()
另外,你可以暂时删除setTimeout调用吗?
答案 2 :(得分:0)
我相信您应该使用submitHandler
方法提交表单。
你可以尝试:
submitHandler: function(form) {
$("#btnSave").button('loading');
setTimeout(function() { $("#btnSave").button('reset'); }, 3000);
success2.show();
error2.hide();
form.submit();
}
然后,如果按钮是提交按钮,则可以删除点击处理程序。如果不是,您可以将其更改为:
$("#btnSave").click(function() {
$("#formMain").submit();
});
答案 3 :(得分:0)
确保您的按钮设置了type="submit"
属性。