0

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

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

这适用于铬:

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

但是,IE 做了一些奇怪的事情。为了让它工作,我必须将侦听器绑定到“显示”事件(“显示”不起作用)和文档而不是模式。

在 document.ready 中:

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

点击按钮后:

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

但这是踢球者 -除非alert('hello');我在上面添加一个,否则这也不起作用.datepicker(). 为什么警报会改变任何东西?我不知道,但它也会堆积起来——每次单击其中一个按钮时,您都会收到更多警报​​,即第一次出现一个警报,第二次出现两个警报,依此类推。

我正在使用引导程序 2.2 和 IE8(标准模式,还有一个元数据来确保页面呈现为 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 并选择紧随其后的代码。为什么一个简单的警报会产生如此大的影响?

4

1 回答 1

1

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

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

但是,我确实记得几个月前遇到过类似的问题,如果我没记错的话,将以下行添加到您的 html 头部部分应该会有很大帮助。

<!--[if lt IE 9]>
    <script src="https://html5shim.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
于 2013-10-06T13:29:20.503 回答