2010-05-13 5 views
0

Je suis confronté à un problème lors du dépannage d'une page Web qui fonctionne dans IE mais pas Firefox. Le débogueur Firefox est l'arrêt sur la ligne suivante:Problème Javascript qui fonctionne dans IE et non Firefox

btnhelp = new button("btnhelp", framemenu.document.imghelp, "../images/gui/help_o.jpg", "../images/gui/help.jpg", "", "hand", true); 

Je vois que le bouton est défini dans une autre classe avec quelques fonctions prototypes comme si:

function button(jscriptname, htmlobj, dnimg, dimimg, action, cursor, enabled, hlimg) 
{ 
    //object for managing buttons easily 
    this.img = htmlobj; 

    if(htmlobj.name) 
    this.name = htmlobj.name 
    else if(htmlobj.id) 
    this.name = htmlobj.id 
    else 
    this.name = "error"; 

    this.upimg = new Image(); 
    this.dnimg = new Image(); 
    this.dimimg = new Image(); 
    this.hlimg = new Image(); 

    this.upimg.src = this.img.src; 
    this.dnimg.src = dnimg; 
    this.dimimg.src = dimimg; 
    if(hlimg) 
    this.hlimg.src = hlimg; 
    this.action = action; 
    this.jscriptname = jscriptname; 

    if(cursor) 
    this.cursor = cursor; 
    else 
    this.cursor = "hand"; 

    if(enabled) 
    this.enable(); 
    else 
    this.disable(); 

    this.img.onclick= new Function(this.jscriptname + ".click();"); 
    this.img.onmouseover= new Function(this.jscriptname + ".mouseover();"); 
    this.img.onmouseout= new Function(this.jscriptname + ".mouseout();"); 
} 

button.prototype.enable = _enable; 
button.prototype.disable = _disable; 
button.prototype.mouseover = _mouseover; 
button.prototype.mouseout = _mouseout; 
button.prototype.click = _click; 
button.prototype.hilight = _hilight; 

function _enable() 
{ 
    this.img.src = this.upimg.src; 
    this.img.style.cursor = this.cursor; 
    this.enabled = true;  
} 

function _disable() 
{ 
    this.img.src = this.dimimg.src; 
    this.img.style.cursor = "default"; 
    this.enabled = false; 
} 

function _hilight(bool) 
{ 
    this.img.src = this.hlimg.src; 
    this.enabled = bool; 
} 

function _mouseover() 
{ 
    if(this.enabled) 
     this.img.src = this.dnimg.src; 
} 

function _mouseout() 
{ 
    if(this.enabled) 
    { 
     this.img.src = this.upimg.src; 
    } 
} 

function _click() 
{ 
    if(this.enabled) 
     eval(this.action); 

} 

Lorsque le débogueur ne touche le bthhelp = nouveau bouton ligne, il va nsSessionStore.js:

handleEvent: function sss_handleEvent(aEvent) { 

Une fois qu'il quitte cette fonction, il ne revient pas au JavaScript et la ligne suivante est jamais appelé, me conduit à penser que Il y a un problème dans l'appel pour créer un nouveau bouton. Est-ce que quelqu'un sait ce que je dois faire pour résoudre ce problème?

+0

Quelle erreur obtenez-vous? – SLaks

+0

Vos gestionnaires d'événements sont complètement incorrects. – SLaks

+0

Aucune erreur du tout –

Répondre

3

Si Firefox est l'arrêt sur la ligne

btnhelp = new button("btnhelp", framemenu.document.imghelp, "../images/gui/help_o.jpg", "../images/gui/help.jpg", "", "hand", true); 

Les seuls problèmes potentiels pourraient être soit button ne définit pas encore ou il y a un problème avec framemenu.document.imghelp. Tous les autres arguments sont des primitives, donc je ne vois pas pourquoi il y aurait un problème avec ceux-là.

Je suppose - qui est à peu près tout ce que n'importe qui pourrait vous donner sans plus d'informations - que le problème est que framemenu est l'ID d'un élément dans votre document, mais n'est pas réellement défini comme une variable. Internet Explorer enregistre automatiquement tous les éléments avec un attribut id valide en tant qu'objets globaux accessibles depuis le script sans avoir à utiliser document.getElementById(). Aucun autre navigateur ne le fait, vous devez utiliser document.getElementById() ou une autre forme de sélection d'élément.

Questions connexes