2010-07-15 4 views
0

Encore une fois, je travaille avec le code de mon prédécesseur et je suis à court de celui-ci. Il semble être un script de navigation échantillonné. Il reçoit une erreur dans IE indiquant Object doesn't support this property or method. Voici ce que j'ai réduit l'erreur à.Javascript: IE Erreur, Firebug ne pas errer. Où est-ce?

La fonction:

/** 
* hoverIntent r5 // 2007.03.27 // jQuery 1.1.2+ 
* <http://cherne.net/brian/resources/jquery.hoverIntent.html> 
* 
* @param f onMouseOver function || An object with configuration options 
* @param g onMouseOut function || Nothing (use configuration options object) 
* @author Brian Cherne <[email protected]> 
*/ 
(function($){$.fn.hoverIntent=function(f,g){var cfg={sensitivity:7,interval:100,timeout:0}; 
cfg=$.extend(cfg,g?{over:f,out:g}:f); 
var cX,cY,pX,pY; 
var track=function(ev){cX=ev.pageX; 
cY=ev.pageY; 
}; 
var compare=function(ev,ob){ob.hoverIntent_t=clearTimeout(ob.hoverIntent_t); 
if((Math.abs(pX-cX)+Math.abs(pY-cY))<cfg.sensitivity){$(ob).unbind("mousemove",track); 
ob.hoverIntent_s=1; 
return cfg.over.apply(ob,[ev]); 
}else{pX=cX; 
pY=cY; 
ob.hoverIntent_t=setTimeout(function(){compare(ev,ob); 
},cfg.interval); 
}}; 
var delay=function(ev,ob){ob.hoverIntent_t=clearTimeout(ob.hoverIntent_t); 
ob.hoverIntent_s=0; 
return cfg.out.apply(ob,[ev]); 
}; 
var handleHover=function(e){var p=(e.type=="mouseover"?e.fromElement:e.toElement)||e.relatedTarget; 
while(p&&p!=this){try{p=p.parentNode; 
}catch(e){p=this; 
}}if(p==this){return false; 
}var ev=jQuery.extend({},e); 
var ob=this; 
if(ob.hoverIntent_t){ob.hoverIntent_t=clearTimeout(ob.hoverIntent_t); 
}if(e.type=="mouseover"){pX=ev.pageX; 
pY=ev.pageY; 
$(ob).bind("mousemove",track); 
if(ob.hoverIntent_s!=1){ob.hoverIntent_t=setTimeout(function(){compare(ev,ob); 
},cfg.interval); 
}}else{$(ob).unbind("mousemove",track); 
if(ob.hoverIntent_s==1){ob.hoverIntent_t=setTimeout(function(){delay(ev,ob); 
},cfg.timeout); 
}}}; 
return this.mouseover(handleHover).mouseout(handleHover); 
}; 
})(jQuery); 

La ligne document.ready provoquant l'erreur:

var config = {  
     sensitivity: 1, // number = sensitivity threshold (must be 1 or higher)  
     interval: 50, // number = milliseconds for onMouseOver polling interval  
     over: megaHoverOver, // function = onMouseOver callback (REQUIRED)  
     timeout: 200, // number = milliseconds delay before onMouseOut  
     out: megaHoverOut // function = onMouseOut callback (REQUIRED)  
    }; 

    $("ul#topnav li .sub").css({'opacity':'0'}); 
    $("ul#topnav li").hoverIntent(config); 

Je suis à une perte sur la façon de résoudre ce problème et enfin obtenir cette section fixe.

Les deux fonctions définies dans document.ready.

function megaHoverOver(){ 
     $(this).find(".sub").stop().fadeTo('fast', 1).show(); 

     //Calculate width of all ul's 
     (function($) { 
      jQuery.fn.calcSubWidth = function() { 
       rowWidth = 0; 
       //Calculate row 
       $(this).find("ul").each(function() {      
        rowWidth += $(this).width(); 
       }); 
      }; 
     })(jQuery); 

     if ($(this).find(".row").length > 0) { //If row exists... 
      var biggestRow = 0; 
      //Calculate each row 
      $(this).find(".row").each(function() {        
       $(this).calcSubWidth(); 
       //Find biggest row 
       if(rowWidth > biggestRow) { 
        biggestRow = rowWidth; 
       } 
      }); 
      //Set width 
      $(this).find(".sub").css({'width' :biggestRow}); 
      $(this).find(".row:last").css({'margin':'0'}); 

     } else { //If row does not exist... 

      $(this).calcSubWidth(); 
      //Set Width 
      $(this).find(".sub").css({'width' : rowWidth}); 

     } 
    } 

    function megaHoverOut(){ 
     $(this).find(".sub").stop().fadeTo('fast', 0, function() { 
      $(this).hide(); 
     }); 
    } 

Répondre

0

Auparavant:

The problem is almost certainly opacity , which is not supported in IE. Check out this nice quirksmode article on cross-browser opacity issues.

Correction: Comme @patrick souligne à juste titre, et sauvegarde avec une référence de code source pour démarrer, jQuery est assez intelligent pour traiter automatiquement avec ses propres marques spéciales IE de la gestion de l'opacité. Quel que soit le problème du PO, ce n'est pas la solution.

+2

La seule 'opacity' que je vois est dans un appel jQuery, où il est pris en charge. http://github.com/jquery/jquery/blob/master/src/css.js#L51 – user113716

+0

@patrick - Est-ce que jQuery nettoie cela même s'il passe dans une carte, plutôt que .css ('x', 'y')? Si oui, alors je suis corrigé. Je devrais vraiment sortir et utiliser IE plus. –

+0

Oui, jQuery accepte une carte simplement pour définir plusieurs propriétés. Tout se traduit également. Bien que je déteste dire quelque chose qui vous obligerait à utiliser IE * plus *. ; o) – user113716

0

Je suis capable d'exécuter ce code sans erreur (voir http://jsfiddle.net/veHEY/). Il semble que le problème se situe dans les fonctions megaHoverOver et megaHoverOut que vous transmettez via l'objet de configuration. Avez-vous le code pour ces fonctions?

+0

BDukes, je vais publier les fonctions dans un montage, donc ce n'est pas si malpropre et ça ira vraiment. – Slevin

+0

Aussi, voici l'URL à laquelle cette référence: http://www.ci.fayetteville.nc.us/files.aspx?do=showfolder&id=21&folder=Agendas – Slevin

+0

Firebug a retourné cette erreur maintenant: $ ("ul #topnav li "). hoverIntent n'est pas une fonction – Slevin