jQuery:IE 7兼容性问题 - $(窗口).resize触发事件和锁定

时间:2011-08-06 17:43:33

标签: javascript jquery internet-explorer-7

解决方案:

http://noteslog.com/post/how-to-fix-the-resize-event-in-ie/

发展问题:

我遇到了与jQuery的IE7兼容性问题。本质上应该发生的是resize事件告诉两个div不显示,并将另一个div更改为visible。然后在发生setTimeout之后重新打开div,并且不显示所显示的另一个div;然后重新加载页面。这适用于IE8,IE9,Mozilla,Chrome和Safari。所以这必须与IE7相关。有什么建议和想法吗?我总是感激不尽。

<script type="text/javascript">
    $(document).ready(function(){
        $(window).resize(function() {
            $('#res_mainContainer').css({"display":"none"});
                    for ( var h = 1; h < 100; h++)
                             {
                                    $('#CarLot' + h).css({"visibility":"hidden"});
                             } 
            $('#loading').css({"display":"block"});
              var constantResize =  jQuery(window).width() + 'x' + jQuery(window).height();
              $("#WINDOWS_RESOLUTION").text(constantResize);


        setTimeout( function() {
            $('#res_mainContainer').css({"display":"block"});
                    for ( var h = 1; h < 100; h++)
                             {
                                    $('#CarLot' + h).css({"visibility":"visible"});
                             } 
            $('#loading').css({"display":"none"});
            location.reload()
            }, 2000 );

        });
    });
</script>

受限制时使用的旧JavaScript:

<script type="text/javascript">
var timeoutId;
function throttleResize(fn) {
window.onresize = function () {
    window.clearTimeout(timeoutId);
    timeoutId = window.setTimeout(function () {fn.call();}, 1000);
    document.getElementById("loading").className = "loading-visible";
    document.getElementById('res_mainContainer').style.visibility = 'hidden';
             for ( var h = 1; h < 40; h++)
                 {
                 document.getElementById('Carlot' + h ).style.visibility = 'hidden';
                 } 
    };
}

function doSomething() {
window.location.reload(true);
document.getElementById("loading").className = "loading-invisible";
document.getElementById('res_mainContainer').style.visibility = 'visible';
             for ( var h = 1; h < 40; h++)
                 {
                 document.getElementById('CarLot' + h ).style.visibility = 'visible';
                 }
}

throttleResize(doSomething);

</script>

1 个答案:

答案 0 :(得分:1)

在IE和WebKit浏览器中持续调整大小,所以当你重新调整窗口时,你可能会调用你的处理程序数十次或数百次,所以这可能就是你看到IE7的原因(使用比IE8慢得多的JS引擎)或任何其他现代浏览器)锁定。

通常你想要做的是限制resize事件(不经常调用它)。见这里:http://mbccs.blogspot.com/2007/11/fixing-window-resize-event-in-ie.html