我正在尝试从php脚本打开一个窗口。但是当我点击时我得到了这个错误
线:389 错误:'surgExpressBuildDefaultButton'为null或不是对象
第389行代码如下
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;
}
可能是什么问题。有什么想法吗?
答案 0 :(得分:2)
如果不知道那四十几行中的是489行就很难分辨,但是我跳了出来:
function setupLayout(i)
{
document.body.onselectstart = function()
{
if (event.srcElement.tagName.search(/input|textarea/i)) return false;
^-- here
您使用的是event
而未声明它(至少在您引用的代码中没有)。在IE上,这将起作用,因为IE使事件对象成为window
的属性(除非它们被其他声明遮蔽,否则您可以访问window
属性而无需明确限定它们),但在大多数情况下其他浏览器事件对象是事件处理函数的参数 - 因此代码尝试使用undefined
值作为对象引用,这恰好触发了您看到的错误消息。
在浏览器中处理这种差异的常用习惯用法(除了使用像jQuery或Prototype这样的库来处理它)是这样的:
document.body.onselectstart = function(event)
{
event = event || window.event;
// ...
};
这个成语将event
声明为函数的参数,但后来又回到查看window
(以支持IE)。