开发者

jQuery & $.fn undefined in IE7

开发者 https://www.devze.com 2023-01-17 11:31 出处:网络
$(window).load(function(){ alert(typeof $.fn.init_deps); }); $(document).ready(function()开发者_Python百科{
$(window).load(function(){

alert(typeof $.fn.init_deps);

});

$(document).ready(function()开发者_Python百科{

    /* Departments switcher */
    $.fn.init_deps = function(s){

        var o = {
            deps:false,
            cats:false              
        }
        $.extend(o,s);

        if(!s.deps || !s.cats) {return;}
        return this.each(function(){

            var select = $('<select id="department" name="department"></select>')
                .appendTo(this)
                .departments(s)
                .change(function(){
                    var select = $('select#category');
                    select.categories({cats:s.cats,current_dep:$(this).val()});

                    var p_width = select.parent().outerWidth();
                    var ch_width = select.outerWidth();
                    select.parent().css('width',p_width+'px')
                        .find('select').css('width',(ch_width + 8)+'px')
                        .parent().find('span').css('width',(p_width - 20)+'px');    
                    $.uniform.update(select);
                });

            var p_width = select.parent().outerWidth();
            var ch_width = select.outerWidth();
            select.uniform({selectClass:'selector uni1'})
                .parent().css('width',p_width+'px')
                .find('select').css('width',(ch_width + 8)+'px')
                .parent().find('span').css('width',(p_width - 20)+'px');            

        });

    }
});

Alert returns undefined in IE7, but in all other browsers it returns function.

Help, can't figure out where is problem.


window onload probably fires before the function is bound in IE. You should define the $.fn before document ready.

$(window).load(function(){

alert(typeof $.fn.init_deps);

});
(function($){

    $.fn.init_deps = function(s){

        var o = {
            deps:false,
            cats:false              
        }
        $.extend(o,s);

        if(!s.deps || !s.cats) {return;}
        return this.each(function(){

            var select = $('<select id="department" name="department"></select>')
                .appendTo(this)
                .departments(s)
                .change(function(){
                    var select = $('select#category');
                    select.categories({cats:s.cats,current_dep:$(this).val()});

                    var p_width = select.parent().outerWidth();
                    var ch_width = select.outerWidth();
                    select.parent().css('width',p_width+'px')
                        .find('select').css('width',(ch_width + 8)+'px')
                        .parent().find('span').css('width',(p_width - 20)+'px');    
                    $.uniform.update(select);
                });

            var p_width = select.parent().outerWidth();
            var ch_width = select.outerWidth();
            select.uniform({selectClass:'selector uni1'})
                .parent().css('width',p_width+'px')
                .find('select').css('width',(ch_width + 8)+'px')
                .parent().find('span').css('width',(p_width - 20)+'px');            

        });

    }
})(jQuery);


$document.ready works differently in different browsers. In IE it will bind to windows onload

window.attachEvent( "onload", jQuery.ready );

Therefore you can't count on code in a document.ready block to run before an onload block.

0

精彩评论

暂无评论...
验证码 换一张
取 消