javascript 错误为 null 或不是对象

标签 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;
}

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

最佳答案

如果不知道这四打行中的哪一行是第 489 行,就很难判断,但这让我感到惊讶:

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

您正在使用事件而没有声明它(至少在您引用的代码中没有声明)。在 IE 上,这会起作用,因为 IE 使事件对象成为 window 的属性(除非它们被其他声明隐藏,否则您可以访问 window 属性,而无需显式限定)它们),但在大多数其他浏览器上,事件对象是事件处理函数的参数 - 因此代码会尝试使用 未定义 值作为对象引用,这会准确触发您的错误消息又看到了。

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

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

该惯用语将事件声明为函数的参数,但随后让它回退到查看窗口(以支持 IE)。

关于javascript 错误为 null 或不是对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2649199/

相关文章:

javascript - 以下程序是否在外循环的第一次迭代时执行嵌套循环?

jquery - Ipad 问题 - 模态显示在叠加层后面

jquery - 如何获取 jQuery/js 中 $(document) 中单击的任何元素的 ID?

javascript - jQuery 可排序和可放置列表

javascript - Firebase Cloud Functions JavaScript - 如何在一个函数中从不同表获取多个数据

javascript - Google Analytics 调用后恢复原始 anchor 击事件

javascript - 使用javascript连接tfs api

jquery - 如何在 JQuery Select2 插件中使用选定值创建占位符文本

javascript - jQuery UI 自动完成

javascript - 如何限制JQuery selectable-helper的范围?