2010-09-26 11 views
0
$(window).load(function(){ 

alert(typeof $.fn.init_deps); 

}); 

$(document).ready(function(){ 

    /* 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');    

     }); 

    } 
}); 

L'alerte retourne undefined dans IE7, mais dans tous les autres navigateurs, elle renvoie la fonction.

Aide, ne peut pas déterminer où est le problème.

Répondre

2

window onload se déclenche probablement avant que la fonction soit liée dans IE. Vous devez définir le $ .fn avant le document prêt.

$(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); 
+0

IE ne lance aucune alerte et ne génère aucune erreur. Je suis totalement confus. Mais je jette l'alerte si je supprime complètement les fonctions. – Somebody

+0

cela signifie qu'il y a une erreur de script. essayez de commenter des parties du code, comme les parties où vous assignez mathématiquement largeur/hauteur et voyez si c'est dans le bon format. assurez-vous également que vous n'utilisez pas les mots réservés IE, essayez de donner un nom différent à certaines variables. –

+0

Assurez-vous que '$ .fn.departments' et' $ .fn.categories' sont aussi assignés AVANT DOM READY en le mettant dans la fonction '(function ($) {') –

1

document.ready de $ fonctionne différemment dans les différents navigateurs. Dans IE, il se liera aux fenêtres onLoad

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

Par conséquent, vous ne pouvez pas compter sur le code dans un bloc document.ready à courir avant un bloc onload.