我试图在提交表格时显示模态,例如:
表单有两个文本字段,如果其中一个填写,则模态将显示给用户一些信息,如果两个字段都没有填写,那么表单将不会提交 为此我做了这个但没有成功..
jsfiddle:jsFidle Link
<div id="modal-3" class="modal fade" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
<h3 id="myModalLabel">Modal header</h3>
</div>
<div class="modal-body">
<p>do you want to save partial info</p>
</div>
<div class="modal-footer">
<button class="btn" data-dismiss="modal" aria-hidden="true" id="finishNow">Finish Now</button>
<button class="btn btn-primary" data-dismiss="modal" id="doItLater">Do It Later</button>
</div>
</div>
</div>
<a href="#modal-3" role="button" class="btn" data-toggle="modal" id="confirmButton">Confirm</a>
<form name="asd" action="asdd" name="formName" id="refrenceSubmit" >
<input type="text" name="name11" id="nameField" value=""/>
<input type="text" name="name22"id="phoneField" value=""/>
<input type="submit" name="name33"value="Submit" />
</form>
JS:
$(function(){
$("#refrenceSubmit").submit(function(){
var inputFieldsCount=0;
$(this).find('input[type=text]').each(function(){
if($(this).val() != "") inputFieldsCount+=1;
});
if(!inputFieldsCount){
alert("You must fill in at least one field");
return false;
}else if(inputFieldsCount<2){
$('#confirmButton').click()
$('#showModelContainer').show()
$('#doItLater').click("click",function (e) {
$('#refrenceSubmit').submit()
}
});
return false;
}
});
});
编辑JAVASCRIPT :
$(function(){
$("#submitAndContinue").click(function(evt){
var inputFieldsCount=0;
$('.refrenceSubmit').find('input[type=text]').each(function(){
if($(this).val() != "") inputFieldsCount+=1;
});
if(!inputFieldsCount){
alert("You must fill in at least one field");
evt.preventDefault();
}else if(inputFieldsCount<5){
$('#modal-3').modal('show');
evt.preventDefault();
}
else {
$('#modal-3').modal('hide'); //in-case is showing
}
});
$('#doItLater').on("click",function (e) {
$('#saveAndContinue').val('saveAndContinue');
$('.refrenceSubmit').submit();
});
});
答案 0 :(得分:3)
jsfiddle中的原始HTML代码隐藏了模态的封闭容器。此外,JavaScript中存在语法错误。这是一个新的jsfiddle,修复了这些问题,还展示了如何触发模态,然后在单击模态中的按钮时手动提交。
代码:
$(function(){
$("#refrenceSubmit").submit(function(evt){
var inputFieldsCount=0;
$(this).find('input[type=text]').each(function(){
if($(this).val() != "") inputFieldsCount+=1;
});
if(!inputFieldsCount){
alert("You must fill in at least one field");
evt.preventDefault();
}else if(($('#nameField').val()=="")&&
($('#phoneField').val()!="")){
$('#modal-3').modal('show');
evt.preventDefault();
}
else {
$('#modal-3').modal('hide'); //in-case is showing
}
});
$('#doItLater').click("click",function (e) {
$('#nameField').val("not clear what you intended, but this sets value in name field");
$('#refrenceSubmit').submit();
});
});
目前尚不清楚你想做什么,但这应该给你一个起点。如果要挂接模态,可以绑定模态按钮上的单击事件,或者可以查看modal close event。
另外,请注意,不推荐使用false来取消提交事件。而是使用preventDefault。
答案 1 :(得分:1)
我刚刚改变了你的代码
代码将在提交时打开模态...检查出来
$(function(){
$('form').on('submit', function () {
$('#modal-3').modal('show');
return false;
});
});
这是修复:我已经改变了你的对象:)
(function () {
var confirmSubmitManager = {
init: function () {
this.submitButton = null;
this.confirmButton = null;
this.modalContainerView = null;
this.isFormPrestine = false;
this.form = null;
this.inputs = [];
this.cache();
this.bindEvents();
return this;
},
cache: function() {
this.submitButton = $("input[type=submit]");
this.confirmButton = $("#doItLater");
this.modalContainerView = $("#modal-3");
this.inputs = $("#refrenceSubmit > input[type=text]");
this.form = $("#refrenceSubmit");
},
bindEvents: function () { // attach event handlers
this.submitButton.on('click', this.validateSubmit);
this.confirmButton.on('click', this.confirm);
},
validateSubmit : function() {
var self = confirmSubmitManager;
var dirtyInputs = 0;
for (var input in self.inputs) {
if ($(self.inputs[input]).val() == "") {
dirtyInputs++;
}
}
if (dirtyInputs > 0) {
alert("You must fill in at least one field");
self.isFormPrestine = false;
} else {
self.isFormPrestine = true;
}
// incase the inputs are pristeen
self.modalContainerView.modal('show');
return false;
},
confirm: function () {
var self = confirmSubmitManager;
if(self.isFormPrestine)
self.form.submit();
}
};
window.load = confirmSubmitManager.init();
})(jQuery);