2014-06-17 25 views
-3

我想對現有的vb.net網站做一些小改動,這個改動是由不再爲公司工作的人編寫的,但每次javascript函數是從腳本文件中調用的,而不是它定義的腳本文件,我在Chrome的控制檯中看到「Uncaught Reference Error:undefined不是函數」。從不同的javascript文件調用函數導致「undefined不是函數」

一些腳本被加載主文件中:

<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

功能都是你加載的文件,加載正確和有您要使用的方法?如果他們在那裏,確保他們首先被加載。您可能正試圖在方法被加載到其文件之前使用方法。 –

+0

查看控制檯堆棧跟蹤並嘗試用方法拋出錯誤來解決。然後檢查使用此方法的JavaScript是否包含在您實際看到的頁面中。 –

+0

@SpencerWieczorek所有的頁面都被加載並且包含有問題的方法。 – octothorpentine

回答

2

Here你可以看到這一點: 「的JavaScript函數中的變量聲明(使用VAR)成爲本地的功能

變量得到一個局部範圍:它只能從該函數內訪問。 「

嘗試定義像

function deNullValue(val,defaultVal) { 
    var ret = ""; 
    defaultVal = String.iifValueIsNullOrEmpty(defaultVal,""); 
    ret = String.iifValueIsNullOrEmpty(val,defaultVal); 
    return ret; 
} 
+0

除非我誤解,否則他會聲明String.deNullValue而不使用「var」關鍵字,使其成爲全局變量,然後將其設置爲等於該函數。 – octothorpentine

+0

是的,按照這些指示之後,錯誤信息現在顯示爲「未捕獲的參考誤差:[函數的名稱]未定義」,這似乎不是一個重大的改進。 – octothorpentine

相關問題