我有一个带有几个bootstrap模态的页面:
data-toggle="modal" data-target="#modal-12345"
问题是,我有一个可点击的整个表行,比如
<tr data-toggle="modal" data-target="#modal-12345">
模态内容位于右下方的另一个隐藏表格行中,后面是下一个可点击行,依此类推。现在,此行还包含一个按钮,单击该按钮将转到另一个页面。
我需要整个行可点击以便打开模态,除非点击转到其他页面的按钮,然后我需要停止打开模态。
我需要这样的东西
<script>
$('.ID').on('click', '.btn', function(e) { e.stopPropagation(); })
</script>
但针对此:
data-toggle="modal"
我也尝试给TR一类&#34; modaltoggle&#34;然后使用javascript调用它作为.modaltoggle,但那也没有。
答案 0 :(得分:14)
为您不想触发模态的项添加某种标识符,例如no-modal
类,然后在jQuery中为模态的show.bs.modal
事件添加代码。捕获relatedElement,它是触发事件的元素,然后查看它是否具有您正在查找的类。如果是,请运行e.stopPropagation()
。
<强>的jQuery 强>:
$('#myModal').on('show.bs.modal', function (e) {
var button = e.relatedTarget;
if($(button).hasClass('no-modal')) {
e.stopPropagation();
}
});
<强> HTML 强>:
<button type="button" class="btn btn-primary btn-lg" data-toggle="modal" data-target="#myModal">
Launch demo modal
</button>
<button type="button" class="btn btn-primary btn-lg no-modal" data-toggle="modal" data-target="#myModal">
Launch demo modal
</button>
<div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
<h4 class="modal-title" id="myModalLabel">Modal Header</h4>
</div>
<div class="modal-body">
...
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
<button type="button" class="btn btn-primary">Save changes</button>
</div>
</div>
</div>
</div>
如您所见,第二个按钮有一个名为no-modal
的类。单击时,jQuery会检查该类是否存在,如果存在,则会阻止模式弹出。单击第一个按钮会使模式正常弹出,因为它没有该类。
Bootstrap模式触发特定事件,当它们被页面上的元素弹出时,从触发它们完全弹出的那一刻开始。您可以通过查看官方文档中的Events section for Bootstrap模态来了解这些事件,以了解可以使用它们的内容。
答案 1 :(得分:14)
这是一个JSFiddle来演示我要解释的内容:http://jsfiddle.net/68y4zb3g/
正如MattD解释和演示的那样,尽管他的例子适用于标准模态应用,但防止模态发射相当容易。由于您在脚本代码中使用.btn
,我假设您将其应用于所有相关按钮。我还假设你保留了类似于Bootstrap演示页面上的模态代码。如果您提供实际的表格代码,我可以根据您已有的内容进行定制。
$('tr .btn').on('click', function(e) {
e.stopPropagation();
});
&#13;
td {
border: 1px #000000 solid;
padding: 10px;
}
&#13;
<link href="http://getbootstrap.com/dist/css/bootstrap.min.css" rel="stylesheet"/>
<link href="http://getbootstrap.com/dist/css/bootstrap-theme.min.css" rel="stylesheet"/>
<script src="http://getbootstrap.com/assets/js/ie-emulation-modes-warning.js"></script>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script src="http://getbootstrap.com/dist/js/bootstrap.min.js"></script>
<table>
<tr data-toggle="modal" data-target="#modal-12345">
<td>Launch modal 12345</td>
<td><button id="btn-12345" class="btn">12345</button></td>
</tr>
<tr>
<td colspan="2" class="modal fade" id="modal-12345" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
<h4 class="modal-title" id="myModalLabel">Modal title</h4>
</div>
<div class="modal-body">
12345
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
</div>
</div>
</div>
</td>
</tr>
</table>
&#13;
注意:我替换了通常作为DIV
模态的外包装的TD
,并添加了一些CSS的内容,使其更容易看到内容中的分离。
通过使用应用于所有按钮的类,您不必为每个ID编写函数。话虽如此,我建议使用自定义类作为触发器。 .btn
是Bootstrap核心中的标准类,因此请尝试使用.modalBtn
,以防止任何与合法Bootstrap功能冲突的可能性。
希望这会有所帮助。 ^^
答案 2 :(得分:1)
$('#myModal').on('show.bs.modal', function (e) {
return e.preventDefault();
});
OR
<button type="button" class="custom" data-toggle="modal" data-target-custom="#myModal">Launch demo modal</button>
<script>
target = $(".custom").attr('data-target-custom');
if(condition) {
$(target).modal('show');
}
</script>
e.stopPropagation();或e.preventDefault();如果您要重新打开模式或页面中使用了多个模式,它将无法正常工作。