‘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等中失败。
JSFiddle Demo什么不该做
- 使用Fullcalendar在工具提示中显示Google日历事件描述字段
- fullCalendar的24小时时间格式(因此没有AM到PM)
- jQuery FullCalendar – 尝试在日历上添加事件和显示失败
- Fullcalendar和时区。 救命,我做错了
- 使用Angular2 webpack的Primeng计划
- 如何禁用FullCalendar中的拖动,但保持单击时间段并使“占位符”约会仍然呈现的能力
- 使用emberjs didInsertElement显示两个单独的日历或两个实例jquery fullcalendar插件对象
- 使用addEventSource时,FullCalendar v.2.2.6’hasTime’未定义错误
- 如何在FullCalendar中使用外部元素获取drop和eventDrop的结束时间?