【发布时间】:2023-03-27 18:53:02
【问题描述】:
我正在使用引导程序 3.3.7,并且我有一个包含表单的模式对话框。为了验证表单,我使用 jquery 验证 1.16.0。
我用以下方式显示模态:
$('#myModal').modal('show');
我为提交按钮的单击注册了一个函数,用于检查验证是否成功:
$('#myForm').valid()
如果是这样,则进行 ajax 调用。 提交按钮是这样启用的:
<button type="submit" id="btnDo" data-dismiss="modal" class="btn btn-primary">Do</button>
问题是即使表单验证失败,模式也会被关闭。如果再次显示模态框,则验证错误消息在那里,因此验证本身可以正常执行,只是对话框被关闭。
我设法通过显示模态来解决这个问题:
$('#myModal').toggle();
而不是模态('show')。 但是,出现了一个新的烦恼,模态不再可滚动,我必须通过设置 style="overflow-y: scroll;" 来解决这个问题在模态 div 上。
所以,我的两个问题是:
- 使用 toggle() 显示模式与显示模式有什么区别? modal('show'),当 表单验证失败?
- 为什么使用 toggle() 会生成模态 不可滚动?
谢谢。
更新
根据要求,我包含了一些相关代码。
相关的 HTML:
<input type="button" id="btnShow" value="Show modal" />
<div id="myModal" class="modal">
<div class="modal-dialog">
<div class="modal-body">
<form id="myForm" class="well form-horizontal">
<div class="form-group">
<label for="inputName">Name</label>
<div>
<input class="form-control"
required
type="text"
id="inputName"
name="inputName"
data-val="true"
data-val-required="The name is required." />
<div class="text-danger" data-valmsg-for="inputName" data-valmsg-replace="true"></div>
</div>
</div>
</form>
</div>
<div class="modal-footer">
<button type="submit" id="btnDo" data-dismiss="modal" class="btn btn-primary">Do</button>
</div>
</div>
</div>
脚本:
$('#btnShow').click(function() {
$('#myModal').modal('show');
});
$('#btnDo').click(function() {
console.log('Is my form valid? - ' + $('#myForm').valid());
});
【问题讨论】:
-
另外,这里显示的代码不足以重现演示。
-
@Sparky 这是一个错字,它是“#myForm”,验证工作正常。我包括了一些相关的代码。谢谢。
-
FYI -
.toggle()只是一个 jQuery 方法,用于切换隐藏元素的可见性......它与模式没有任何特定关系。 -
...因此我感到困惑。 :) 但是我猜 .modal('show') 不仅仅是显示模态...
-
默认情况下,模式的按钮可能设置为始终在
click时关闭它,而不考虑您希望在验证失败时保持打开状态。同样,请参阅.modal()方法的选项,以使其即使在与按钮交互时也保持打开状态。然后在.validate()方法中,您可以在submitHandler中以编程方式将其关闭。
标签: jquery twitter-bootstrap twitter-bootstrap-3