我试图对现有的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内部)而不解决问题。有没有人知道可能导致这种情况的原因?
答案 0 :(得分:2)
Here你可以看到这个: “JavaScript函数中声明的变量(使用var)变为函数的LOCAL。
变量获取本地范围:只能从该函数中访问它。“
尝试定义像
这样的函数function deNullValue(val,defaultVal) {
var ret = "";
defaultVal = String.iifValueIsNullOrEmpty(defaultVal,"");
ret = String.iifValueIsNullOrEmpty(val,defaultVal);
return ret;
}