检测是否显示引导模态窗口不能正常工作
Detecting if bootstrap modal window is show don't work properly
如果用户点击按钮,我必须在引导模式窗口中绘制一些东西。我的代码是:
$('#button').on('click', function (evt) {
doSomeCrazyStuff();
$('#myModal').modal('show');
$('#myModal').on('shown.bs.modal', function (e) {
alert('Debug');
drawStuffInModal();
});
});
第一次点击一切工作正常。但是对于第二次点击,我得到两个警报,第三次点击-三个警报等。
用户只能在隐藏模态时点击按钮,因此在下次绘图前需要关闭模态。
我发现一个问题是模态窗口状态的检测-如果我不使用$('#myModal').on('shown.bs.modal', function (e) {})
,但只是等待:
$('#button').on('click', function (evt) {
doSomeCrazyStuff();
$('#myModal').modal('show');
setTimeout(function () {
alert('Debug');
drawStuffInModal();
}, 500);
});
…我总是清醒一次。它是有效的,但这是一个非常丑陋的解决方案。
所以我的问题是:为什么第一个代码不能正常工作?我不想等待n毫秒,因为在某些情况下,模态可能需要更多的时间来加载,然后用户得到错误。
不要在另一个click事件处理程序中绑定新事件。点击#button
可以发生多次,这意味着它将绑定许多相似的重复事件。只需将shown.bs.modal
事件订阅移到外部:
$('#myModal').on('shown.bs.modal', function (e) {
alert('Debug');
drawStuffInModal();
});
$('#button').on('click', function (evt) {
doSomeCrazyStuff();
$('#myModal').modal('show');
});
相关文章:
- Javascript:selenium Web驱动程序isDisplayed()不工作
- jQuery UI自动完成突然停止工作
- AngularJS UI路由器不能像ng路由器那样工作
- HTML5音频加载和播放获胜'我不能在iPad上工作
- JavaScript打印功能使日历停止工作
- Javascript.getHours()工作不正常
- 为什么这在IE中的工作方式与在Firefox中不同
- 视频HTML没有'无法在Internet Explorer 11上工作
- 扩展移相器按钮类不工作
- Firebase迁移-简单的Firebase.set没有'不再工作了——旧的还是新的
- 谷歌地图不是以HTML显示,而是在JS Fiddle上工作
- 正在尝试使用if和else添加类,但无法正常工作
- Jquery FadeIn FadeOut 只工作一次
- Foreach无法在Typescript中工作
- 另一个ajax调用中的Jquery ajax调用在for循环中没有按预期工作
- 为什么不是't窗口.恢复正常工作吗?(javascript/jquery)
- JS可以在Chrome中工作,但不能在Firefox中工作
- ajaxToolkit PopupControlExtender不工作.过时的
- HTML标记在脚本标记中工作
- javascript扫雷器floodfill算法不能正常工作