根据文件:
http://getbootstrap.com/javascript/#modals
它应该触发方法“show.bs.dropdown”和“shown.bs.dropdown”。但事实并非如此:
HTML:
<div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">Hello world</div>
</div>
</div>
jQuery的:
// show.bs.modal doesn't work either
$('#myModal')
.modal('show')
.on('show.bs.modal', function() {
alert('shown baby!');
});
答案 0 :(得分:26)
首先需要注册事件然后触发它
$('#myModal')
.on('show.bs.modal', function() {
alert('shown baby!');
}).modal('show');
答案 1 :(得分:6)
事件显示 .bs.modal在模式还有类&#34;淡出&#34;时不会被触发。而 show .bs.modal始终有效。 见https://github.com/twbs/bootstrap/issues/11793
HTML:
<div class="modal fade" id="first" tabindex="-1" role="dialog" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">Hello world from first modal</div>
</div>
</div>
<div class="modal" id="second" tabindex="-1" role="dialog" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">Hello world from second modal</div>
</div>
</div>
jQuery的:
$('.modal').on('shown.bs.modal', function() {
//fired only in second modal
console.info('shown.bs.modal');
});
$('.modal').on('show.bs.modal', function() {
//fired always
console.info('show.bs.modal');
});
对于bootstrap v3.3.6,将行1010替换为:
that.$element // wait for modal to slide in
看看第1006-1015行:
var e = $.Event('shown.bs.modal', { relatedTarget: _relatedTarget })
transition ?
that.$dialog // wait for modal to slide in
.one('bsTransitionEnd', function () {
that.$element.trigger('focus').trigger(e)
})
.emulateTransitionEnd(Modal.TRANSITION_DURATION) :
that.$element.trigger('focus').trigger(e)
没有转换(没有淡入淡出类),事件 e 立即被触发(在那个。$元素上)。 随着转换,我不确定为什么,但不知何故,来自函数 emulateTransitionEnd 的 bsTransationEnd 事件不由处理。$ dialog.one() 的。但是使用那个。$ element ,一切似乎都有效。
答案 2 :(得分:3)
类似的事情发生在我身上,我已经使用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);
})
答案 3 :(得分:1)
你忘记了显示的“n”
$(document).ready(function(){
$('#myModal')
.modal('show')
.on('shown.bs.modal', function() {
alert('shown baby!');
});
});
答案 4 :(得分:0)
使用文档而不是自定义选择器。显示.bs.modal和show.bs.modal都工作得很好
$(document).on('shown.bs.modal', '.modal', function() {
alert();
});
答案 5 :(得分:0)
如果有人偶然发现此问题,请确保在触发模式的hidden
之前挂上shown
/ toggle
事件。也就是说,声明:
$("#selector").on("hidden.bs.modal", function () {
// do the right thing
});
在调用模态的切换之前,例如:
("#selector").modal("toggle");
我知道这是基本的,但在复杂的代码中它会发生。
答案 6 :(得分:0)
我找到了一个适用于.fade
转换的解决方案:
$(document).on($.support.transition.end, '.modal.fade.in', function(e) {
var $target = $(e.target);
if ($(e.target).is(".modal-dialog")) {
console.log("Modal Shown")
}
});
$(document).on($.support.transition.end, '.modal.fade', function(e) {
var $target = $(e.target);
if (!$target.is(".modal.fade.in") && !$target.is(".modal-dialog")) {
console.log("Modal Hidden")
}
});
答案 7 :(得分:0)
如果模态是动态创建的,请选择最接近的静态父元素,然后将模态添加为引导模态事件起作用的参数:
/* body is static, .modal is not */
$("body").on('shown.bs.modal', '.modal', function() {
alert('shown');
});
$("body").on('hidden.bs.modal', '.modal', function() {
alert('hidden');
});
$("body").on('show.bs.modal', '.modal', function() {
alert('show');
});
$("body").on('hide.bs.modal', '.modal', function() {
alert('hide');
});