2010-04-15 7 views
0

Je suis en train d'ouvrir une fenêtre à partir d'un script php. Mais quand je clique, je reçois cette erreurerreur javascript est nul ou non un objet

ligne: 389 Erreur: « surgExpressBuildDefaultButton » est nulle ou non un objet

Code de ligne 389 est comme suit

function setupLayout(i) 
{ 
document.body.onselectstart = function() 
{ 
    if (event.srcElement.tagName.search(/input|textarea/i)) return false; 
} 

setupButtons(); 
if(window.parent.opener.parent.frames[0].surgExpressBuildDefaultButton) 
{ 
    buttonClick(window.parent.opener.parent.frames[0].surgExpressBuildDefaultButton); 
} 
else 
{ 
    layout.buttons.commonButton.fixSelected(); 
} 

for(i = 0; i < da.imgPlus.length; i++) 
{ 
    da.imgPlus[i].onclick = clickPlus; 
    da.imgMinus[i].onclick = clickMinus; 
} 

for(i = 0; i < da.spnName.length; i++) 
{ 
    da.spnName[i].selected = 0; 
    da.spnName[i].title = da.spnName[i].innerText; 

    da.spnName[i].onclick = function(){selectCommonProcedure(this);} 
    da.spnName[i].ondblclick = function(){addCommonProcedure(this);} 

    da.spnName[i].onmouseout = function(){this.className = (this.selected ? "nSelected" : "nOut");} 
    da.spnName[i].onmousedown = function(){this.className = "nDown";} 
    da.spnName[i].onmouseover = da.spnName[i].onmouseup = function(){this.className = "nOver";} 
} 

da.inpSearch.onkeydown = function(){if(event.keyCode == 13) updateProcedureList();} 

da.btnSearch.onclick = da.selSpecialty.onchange = updateProcedureList; 

da.btnClose.onclick = function(){window.close();} 

da.btnAdd.disable = da.btnSave.disable = CC.Disable; 
da.btnAdd.disable(1); 
da.btnAdd.onclick = addCommonProcedure; 
da.btnSave.disable(1); 
da.btnSave.onclick = saveExpress; 
} 

ce qui pourrait être le problème. Une idée?

+3

Laquelle de ces quatre douzaine de lignes est la ligne 389 ?! –

Répondre

2

Il est difficile de dire sans le savoir qui de ces quatre douzaines de lignes est la ligne 489, mais cela m'a sauté aux yeux:

function setupLayout(i) 
{ 
document.body.onselectstart = function() 
{ 
    if (event.srcElement.tagName.search(/input|textarea/i)) return false; 
     ^-- here 

Vous utilisez event sans l'avoir déclarée (au moins, pas dans le code que vous avez cité). Sur IE, ça va travailler parce que IE fait l'événement objet une propriété de window (et à moins qu'ils n'assombris par d'autres déclarations, vous pouvez accéder window propriétés sans les qualifier explicitement), mais sur la plupart des autres navigateurs l'objet événement est un argument à la fonction de gestionnaire d'événements   – et que le code tente d'utiliser une valeur undefined comme une référence d'objet, ce qui déclenche exactement le message d'erreur que vous voyez.

L'idiome habituel pour traiter cet écart dans les navigateurs (autres que d'utiliser une bibliothèque comme jQuery ou Prototype qui gèrent pour vous) est la suivante:

document.body.onselectstart = function(event) 
{ 
    event = event || window.event; 
    // ... 
}; 

cet idiome déclare event comme argument à la fonction, mais est-il revenir à la recherche sur le window (pour soutenir IE).

Questions connexes