我最近在内部公司网站上实施了Selectivizr,因为我们需要支持IE7/8.不幸的是,我们的网站通过jQuery/AJAX进行了大量的动态内容加载.
为了解决这个问题,我重载了jQuery ready函数,在它执行任何设置的任务后重新加载Selectivizr.我的代码看起来像这样:
$(function () {
if ($('body.ie8, body.ie7, body.comp-view8, body.comp-view7').length > 0) {
(function () {
var original = jQuery.fn.ready;
var getSelectivizr;
jQuery.fn.ready = function () {
// Execute the original method.
original.apply(this, arguments);
clearTimeout(getSelectivizr);
getSelectivizr = setTimeout(function () {
$.getScript(selectivizr);
}, 50);
}
})();
}
});
Run Code Online (Sandbox Code Playgroud)
很简单.然而,一位队友最近发现了一个似乎与之相关的错误.在IE8/7中,动态加载到页面中的任何选择下拉列表(我不确定静态下拉列表是否受影响以及这些页面都没有这些下拉列表),需要两次单击才能打开它.
更具体地说,在IE8/7中,第一次点击似乎"关注"下拉列表,而第二次点击则打开它.它的兼容性视图,它实际上打开了一瞬间然后关闭.第二次点击打开它就好了(只要你继续关注下拉列表).
我认为它可能是Selectivizr正在做的事情的一个问题,因为它并不是真的设计用于动态加载的内容,但经过一些调试后,似乎是导致这种奇怪行为的setTimeout.
我完全失去了如何在不删除我的Selectivizr实现的情况下解决这个问题.
值得注意的是,如果进行不同的AJAX调用,则setTimeout是必要的,以防止浏览器多次尝试加载Selectivizr,因为这可能会在浏览器中导致严重的性能问题.
注意:这个问题没有准确反映标题中陈述的问题,所以我更新了它以提供更好的搜索!几周后回到这个问题后,我意识到我的初步调试让我走上了错误的道路.对不起,但我已经提供了一个答案,我希望对此有所帮助!:)