‘show’事件不会在IE9中使用Rails中的Twitter Bootstrap Modal触发
我有一个涉及几个不同框架/库的问题,尽管主要是Twitter Bootstrap(js)和Rails。
我的应用程序中有一个链接,它响应了一些js:
$(function() { var $modal = $(' @product, :customer => @customer, :booking => @booking ) %>'), $calendar = $modal.find('#calendar'), currentProduct = ;, initBookingCalendar; $('body').append($modal); $modal.modal('show'); /* Booking Calendar */ initBookingCalendar = function(el, productId) { el.fullCalendar() ... }; $($modal).on('shown', function() { if($calendar.is(':empty')) { initBookingCalendar($calendar, ); } }); });
问题是由于某些原因,IE9中没有触发“显示”事件! 我在这里重现了这个问题: http : //jsfiddle.net/tvkS6/并通过这样做得到它: http : //jsfiddle.net/tvkS6/9/ 。 问题是我不知道如何在我的代码中实现解决方案,因为我真的不明白问题是什么。
我必须等待initBookingCalendar直到完全显示模式的原因是jQuery FullCalendar插件要求在呈现日历之前元素可见。
任何提示都表示赞赏!
在第一次调用show()
方法之前,需要将侦听器的附加移动到该位置。
$modal.on('shown', function() { if($calendar.is(':empty')) { initBookingCalendar($calendar, <%= @product.id %>); } }); $modal.modal('show');
它可能在非IE浏览器中工作的原因是它们支持CSS转换,这使得触发所shown
事件的代码是异步的。 由于IE不支持它, show()
方法是同步执行的,并且在附加监听器之前触发shown
事件。
更新
这是一个演示,validation了我的解释为什么你的示例在其他浏览器中工作。 通过设置
$.support.transitions = false;
Modal.show()
方法将在所有浏览器上同步运行,因此,您的示例现在将在Chrome,FF等中失败。