IE讨厌我的模态窗口事件

时间:2013-10-04 12:34:01

标签: internet-explorer twitter-bootstrap

我正在建立一个网站,并使用Twitter Bootstrap modal.js作为我项目的一部分。和往常一样,IE正在造成一些麻烦。

我有几个按钮,点击时每个按钮通过ajax获取不同的表单,用表单填充模态,并将其显示出来。由于它们是动态获取的,因此我需要在获取模式后使用其他脚本(例如jQuery UI datepicker)更新一些字段。在ajax调用不起作用之后,我立即需要使用模态事件。

这适用于chrome:

$('#myModal').modal().on('shown', function() {
    $('#id_date').datepicker();
});

然而,IE做了一些奇怪的事情。为了使它工作,我必须将监听器绑定到'show'事件('shows'不起作用)和文档而不是模态。

在document.ready中:

$(document).on('show', function() {
    $('#id_date').datepicker();
});

点击按钮后:

$('#myModal').modal('show'); 

但是这里是踢球者 - 除非我在alert('hello');之上添加.datepicker(),否则无效。为什么警报改变了什么?我不知道,但它也会堆积起来 - 每次点击其中一个按钮就会收到更多警报​​,即第一次发出警报,第二次发出两次警报等等。

我正在使用bootstrap 2.2和IE8(标准模式,还有一个meta来确保页面呈现为IE8而不是旧版本)。我不知道这里有什么问题,请帮忙!

更新

所以我把它缩小了一点。这与“显示”或“显示”事件或绑定内容无关。这是一个很奇怪的问题。这就是我最终做的事情:

$('#myModal').on('shown', function() {
     if (navigator.appName == 'Microsoft Internet Explorer') {
         alert('Hey! you should really use Chrome!');
     }
     $('#id_date').datepicker();
     $('#id_tags').chosen(); 
});


$('#button1').on('click', function() {
     $('#myModal').modal();
});

如果没有警告消息,IE不会运行datepicker并选择紧随其后的代码。 为什么一个简单的警报会产生这样的影响?

1 个答案:

答案 0 :(得分:1)

编辑:重新考虑之后,这似乎是竞争条件

我对为什么发生这种情况没有真正的答案,除了IE是一个痛苦的不同jQuery版本和html5属性..

但是,我记得几个月前遇到过类似的问题,如果我没有弄错的话,在html head部分添加以下代码应该有很多帮助。

<!--[if lt IE 9]>
    <script src="https://html5shim.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->