从不同的javascript文件调用函数导致“undefined不是函数”

时间:2014-06-17 18:29:15

标签: javascript

我试图对现有的vb.net网站进行一些小的更改,这些网站是由不再为公司工作的人编写的,但每次从一个脚本文件调用javascript函数它定义在,我看到"未捕获参考错误:undefined不是一个函数"在Chrome的控制台中。

一些脚本正在主文件中加载:

<script type="text/javascript" src="Scripts/jquery-1.8.3.min.js"></script>
<script type='text/javascript' src="Scripts/JSExtensions.js"></script>
<script type='text/javascript' src="Scripts/GlobalUtilityFunctions.js"></script>
<script language="javascript" type="text/javascript">
        jQuery.event.add(window, "load", resizeFrame);
        jQuery.event.add(window, "resize", resizeFrame);

        function resizeFrame() {
        }

</script>

其余的都加载在页面本身中:

<script type='text/javascript' src="Scripts/GridCalcFunctions.js"></script>
<script type='text/javascript' src="Scripts/InputEventHandlers.js"></script>
<script type='text/javascript' src="Scripts/FocusHandlers.js"></script>
<script type='text/javascript' src="Scripts/ProjectPageFunctions.js"></script>

<script type="text/javascript">
    $(document).ready(function () {

    });
    $(window).unload(function () {
        SaveOnExit();
    });

    function setPIDNumberLabel(ctlID, strVal) {
        var val = strVal;
        var ctl = top.$get(ctlID);
        if (ctl != null) {
            ctl.innerHTML = val;
        }
    }

</script>

GlobalUtilitesFunctions可以轻松访问其他页面上的JSExtensions,但即使两者都加载到主页面中也可以。我认为这必定意味着问题是由此页面上加载的某个文件引起的,但是将它们全部注释并不能解决问题。

作为一个具体的例子,GlobalUtilitiesFunctions包含这个:

    function GetAttributeSelector(attName, attValue, attOperator,attNot) {
        attOperator = String.deNullValue(attOperator, "=");
        [more code]
    }

我得到一个错误,String.deNullValue是未定义的,但在JSExtenstions中是:

String.iifValueIsNullOrEmpty = function (val, trueVal,falseVal) {
    falseVal = String.getArgValue(falseVal, val);
    if (String.isNullOrEmpty(val)) {
        return trueVal;
    }
    else {
        return falseVal;
    }
}
String.deNullValue = function (val,defaultVal) {
    var ret = "";
    defaultVal = String.iifValueIsNullOrEmpty(defaultVal,"");
    ret = String.iifValueIsNullOrEmpty(val,defaultVal);
    return ret;
}

我还尝试在服务器上运行该站点(而不是在Visual Studio内部)而不解决问题。有没有人知道可能导致这种情况的原因?

1 个答案:

答案 0 :(得分:2)

Here你可以看到这个: “JavaScript函数中声明的变量(使用var)变为函数的LOCAL。

变量获取本地范围:只能从该函数中访问它。“

尝试定义像

这样的函数
function deNullValue(val,defaultVal) {
   var ret = "";
   defaultVal = String.iifValueIsNullOrEmpty(defaultVal,"");
   ret = String.iifValueIsNullOrEmpty(val,defaultVal);
   return ret;
}