javascript错误为null或不是对象

时间:2010-04-15 21:46:02

标签: javascript jquery jquery-ui

我正在尝试从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;
}

可能是什么问题。有什么想法吗?

1 个答案:

答案 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值作为对象引用,这恰好触发了您看到的错误消息。

在浏览器中处理这种差异的常用习惯用法(除了使用像jQueryPrototype这样的库来处理它)是这样的:

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

这个成语将event声明为函数的参数,但后来又回到查看window(以支持IE)。