是null或undefined,不是Function对象

时间:2013-10-04 13:30:45

标签: javascript

我有两个JavaScript函数:

function DisplayErrorMessage(fieldElement, messageElement, message) {
  alert(fieldElement.name);
  if(canFocus(fieldElement)){
    //fieldElement.focus();
    if(fieldElement.type =="text") {
      fieldElement.select();
    }
  }
  messageElement.style.backgroundColor='red';
  messageElement.innerText = message;  
}

调用此函数的函数:

function CheckForm(obj, optMsgDiv) {
  if(obj != "") {
    return true;
  } else {
    if(optMsgDiv != "") {
      var messageObj = document.getElementById(optMsgDiv);
      var clearObj = document.getElementById("refUpdMethod");
      var message = getErrorMsg();
      DisplayErrorMessage(clearObj, messageObj, message);
    }
  }
  return false;
}

在一个版本上,它工作得很好,但在我的主要版本上我得到了 错误:属性“DisplayErrorMessage”的值为null或未定义,而不是Function对象。

1 个答案:

答案 0 :(得分:0)

您在哪里看到此错误消息?在某些IDE或浏览器中?

看起来没有找到DisplayErrorMessage函数。如果它和CheckForm都在同一个奇怪的js文件中,也许还有一些其他代码正在使解析失败。

如果它们位于不同的文件中,请确保WebServer正确提供这些文件。

要避免此错误,请在使用资源前始终验证资源是否可用:if('function' == typeof DisplayErrorMessage){ DisplayErrorMessage(...); }if('function' != typeof DisplayErrorMessage) return;

另外,避免将对象与空字符串进行比较。而不是obj != ""使用'object' == typeof obj

更新:正如fsgale所说,也许文件包含在错误的顺序中。要避免此错误,请在加载js文件后立即避免执行代码。在文件体中只需定义函数和类,然后使用在加载页面后执行的代码来实例化对象和执行函数。这样做可以确保在代码运行时加载所有js文件,并使页面呈现更快一些。对于jQuery,您可以这样做:

if('function' == typeof $)
    $(document).ready(init);

function init(){
    if('function' != typeof $) return;

    // init my stuff
}

此外,在可能的情况下,请在</body>之前的HTML文档末尾添加js文件。