我正在建立一个网站,并使用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并选择紧随其后的代码。 为什么一个简单的警报会产生这样的影响?
答案 0 :(得分:1)
编辑:重新考虑之后,这似乎是竞争条件
我对为什么发生这种情况没有真正的答案,除了IE是一个痛苦的不同jQuery版本和html5属性..
但是,我做记得几个月前遇到过类似的问题,如果我没有弄错的话,在html head部分添加以下代码应该有很多帮助。
<!--[if lt IE 9]>
<script src="https://html5shim.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->