我正在使用bootstrap 3 docs中的模式示例。模态作品。但是,当它触发时,我需要访问show.bs.modal事件。现在我只是在尝试:
$('#myModal').on('show.bs.modal', function () {
alert('hi')
})
没有任何反应,该事件不会触发。我究竟做错了什么???这对我来说没有意义。
Answers:
用这个:
$(document).on('show.bs.modal','#myModal', function () {
alert('hi');
})
$(data).modal('show');
。
$(document).on('hidden.bs.modal', function (e) { if (e.target.id === 'my-modal-id') { alert('hi'); } });
。ID来自<div class="modal fade" id="my-modal-id">
$(document).on(...
,将侦听器附加到文档上下文,无论目标元素是否存在,都将其附加到文档上下文。您应该将事件名称添加为第一个参数,并将回调名称添加为最后一个,但是您可以将查询选择器添加为第二个参数
确保on('shown.bs.modal')
在实例化弹出窗口之前先放置您的代码
$("#myModal").on("shown.bs.modal", function () {
alert('Hi');
});
$("#myModal").modal('show'); //This can also be $("#myModal").modal({ show: true });
要么
$("#myModal").on("shown.bs.modal", function () {
alert('Hi');
}).modal('show');
要专注于某个字段,最好使用shown.bs.modal
代替,show.bs.modal
但是出于其他原因,您想要在模式开始显示之前在后台隐藏某些内容或设置某些内容,请使用show.bs.modal
函数。
$(document).on()
。
show.bs.modal
与有所不同shown.bs.modal
。前者在模态即将显示时触发。后者已显示出来。大不同。
show.bs.modal
?
.modal('show')
。有它要求情态四个事件:show.bs.modal
,shown.bs.modal
,hide.bs.modal
,hidden.bs.modal
-展现的是当它要表明,当它显示出,同为隐藏和隐藏。getbootstrap.com/docs/3.4/javascript/#modals-events
将您的功能包装在中$(document).ready(function() {
,或更简单地说,是$(function() {
。在CoffeeScript中,这看起来像
$ ->
$('#myModal').on 'show.bs.modal', (event)->
没有它,JavaScript将在文档加载之前执行,并且#myModal
还不是DOM的一部分。这是Bootstrap参考。
试试这个
$('#myModal').on('shown.bs.modal', function () {
alert('hi');
});
使用shown
而不是show
还要确保在功能结束时有分号并发出警报。
类似的事情发生在我身上,我已经使用setTimeout解决了。
Bootstrap使用以下超时完成显示:
c.TRANSITION_DURATION = 300,c.BACKDROP_TRANSITION_DURATION = 150,
因此,使用300多个必须有效,而对我来说200则有效:
$('#myModal').on('show.bs.modal', function (e) {
setTimeout(function(){
//Do something if necessary
}, 300);
})
我有一个类似但不同的问题,当我使用$('#myModal')时仍然无法工作。当我使用$(window)时,我能够使它工作。
我的另一个问题是,我发现如果将模式div html内容存储在类似javascript的变量中,则show事件不会触发。
var content="<div id='myModal' ...";
$(content).modal();
$(window).on('show.bs.modal', function (e) {
alert('show test');
});
该事件从未触发,因为它没有发生
我的解决方法是将div包含在html正文中
<body>
<div id='myModal'>
...
</div>
<script>
$('#myModal).modal();
$(window).on('show.bs.modal', function (e) {
alert('show test');
});
</script>
</body>
请记住将脚本放在“ js / bootstrap”调用之后,而不是之前。
有时,如果出现以下情况,这将不起作用:
1)在您的行之前,Java脚本代码中有错误 $('#myModal').on('show.bs.modal'...)
。要进行故障排除,请在该行之前放置一条警报消息,以查看它在加载页面时是否出现。要解决上述问题,请消除上面的JS,看看哪个是问题所在
2)另一个问题是,如果您以错误的顺序加载JS。例如,您可以$('#myModal').on('show.bs.modal'...)
在实际加载JQuery.js之前拥有一部分。在这种情况下,您的调用将被忽略,因此首先在HTML(请确保查看页面源代码)中检查JQuery的脚本链接是否在您的模式onShow
调用上方,否则将被忽略。要进行故障排除,请在显示前先放一个警报。如果您在onShow函数中看到的是之前的一个,而没有看到,则很明显该函数无法执行。如果拼写正确,那么很有可能没有调用JQuery.js或在该onShow
部分之后进行了调用
$('#myModal').on('show.bs.modal'...)
需要在加载JQuery之后。谢谢!
我对bootstrap4也有同样的问题。解决方案是将其添加到jQuery文档ready()函数中:
$(document).ready(function() {
$('#myModal').on('show.bs.modal', function () {
alert('hi')
})
}
以我为例,问题是travelsize的注释方式。bootstrap.js和jquery之间的导入顺序。因为我使用的是Metronic模板,所以之前没有检查
我使用了jQuery的事件委托/冒泡...对我有用。见下文:
$(document).on('click', '#btnSubmit', function () {
alert('hi loo');
})
也是非常好的信息:https : //learn.jquery.com/events/event-delegation/