开发者

jQuery & $.fn undefined in IE7

$(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

上一篇:

下一篇:

精彩评论

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

最新问答

问答排行榜