JavaScript 函数未定义错误(但已定义)

问题描述 投票:0回答:16

我有一个 JavaScript 函数,它会在模糊时触发。奇怪的是,我第一次运行它时它工作得很好,从那时起我就收到了一个错误,提示 JavaScript 函数未定义 - 并且它停止运行。我用谷歌搜索过类似的问题,但没有一个建议能够解决该问题。 Asp.Net 3.5 Webforms,如果重要的话。我添加了一些可能与问题无关的额外函数和代码行。我遇到的问题与 updateFiscalGrid 这个大函数有关。绑定到事件的 HTML 位于函数下方。

<%@ Page MasterPageFile="~/MasterPages/NPRPage.Master"  CodeBehind="NPRFundingApplication.aspx.cs" Inherits="Tea.Hcf.Web.Secured.NPRFundingApplication" AutoEventWireup="true" Language="C#" EnableEventValidation="true" MaintainScrollPositionOnPostback="true" %>

<%@ Register TagPrefix="ew" Namespace="eWorld.UI" Assembly="eWorld.UI" %>
<%@ Register TagPrefix="hcf" Namespace="Tea.Hcf.Web" Assembly="Tea.Hcf.Web" %>
<%@ Register Src="../Controls/NpCdnSearch.ascx" TagName="NpCdnSearch" TagPrefix="np1" %>
<%@ Register Src="../Controls/NpStudentRoster.ascx" TagName="NpStudentRoster" TagPrefix="np2" %>

<script type="text/javascript" language="javascript">
    //<![CDATA[

    function showMaxWin(nUrl) {
        var h = 600;
        var w = 800;
        var features = 'resizable=1, width=' + w + ', height=' + h + ', top=0, left=0';
        NewWin = window.open(nUrl, 'NewWin', features);
    }

    function dateChangedCallback() {
        updateSubTotals();
    }

    function updateFiscalGrid(){
        var RelatedServicesCost = document.getElementById('<%= RPCB_SUPP_SVCS_SUBTOTAL3.ClientID %>').value;
        var ResidentialCare = document.getElementById('<%= RPCB_RES_SVCS_SUBTOTAL3.ClientID %>').value;
        var TotalCostforResPlacement = document.getElementById('<%= TotalResidentialPlacement.ClientID %>').value;
        var SetAside = document.getElementById('<%= rblSetAsideMet.ClientID %>').value;
        var LocalTaxSubtraction = document.getElementById('<%= LocalTaxShareSubtraction.ClientID %>').value;
        var IDEABRelatedServiceCost = document.getElementById('<%= RelatedServicesSetAside.ClientID %>').value;
        var IDEABDiscretionaryServicesCost = document.getElementById('<%= RelatedServicesDiscretionary.ClientID %>').value;
        var IDEABREsidentialCare = document.getElementById('<%= ResidentialCareSetAside.ClientID %>').value;
        var IDEABDiscResCare = document.getElementById('<%= ResidentialCareDiscretionary.ClientID %>').value;
        var StateFSP = document.getElementById('<%= TotalEducationServices2.ClientID %>').value;
        var Discretionary = document.getElementById('<%= DiscretionaryTotal.ClientID %>').value;
        var IDEABAward = document.getElementById('<%= IdeaBAward.ClientID %>').value;
        if(SetAside = '0'){
            Discretionary = LocalTaxSubtraction + IDEABRelatedServiceCost + IDEABDiscretionaryServicesCost + IDEABREsidentialCare + IDEABDiscResCare;
        }
        else {
            Discretionary = LocalTaxSubtraction + IDEABDiscretionaryServicesCost + IDEABDiscResCare;
        }
        IDEABAward = (RelatedServicesCost + ResidentialCare + TotalCostforResPlacement) - Number(Discretionary));
        //IDEABAward = (Number(RelatedServicesCost) + Number(ResidentialCare) + Number(TotalCostforResPlacement)) - Number(Discretionary));
        document.getElementById('<%= DiscretionaryTotal.ClientID %>').value = Discretionary;
        document.getElementById('<%= IdeaBAward.ClientID %>').value = IDEABAward;
    }


    //]]>
</script>




    <td>
        <hcf:CurrencyBox ID="LocalTaxShareSubtraction" OnBlur= "updateFiscalGrid();" Precision="2" runat="server" />
    </td>
javascript html asp.net webforms
16个回答
14
投票

使用浏览器开发工具看看是否可以从控制台手动调用该函数。如果您仍然收到 Function not Defined 的信息,请执行以下操作:

  • 检查是否有错别字
  • 如果您使用母版页,请确保没有将脚本页面的引用放置在容器标记内(容器标记会被实际页面内容覆盖,这是来自个人经验,哈哈)
  • 清除缓存并重新加载页面

6
投票

这也是因为我试图调用具有相同变量名的函数而发生的。

var fun = fun()


1
投票

让我回答这个问题的是我的命名空间中有一个

empty function

当我

called
那个功能时,我有这个
error
导致整个页面停止工作

TypeError: MyNamespcae.myFunction is not a function

所以不要创建空函数,至少添加一条语句,如 void(0);或返回 null;


1
投票

我经常遇到这种错误。

首先,我会检查我是否调用了正确的函数,如果一切正常,那么我会清除缓存并重新加载它每次都对我有用。

Long press reload button and then do cache clear

希望这有效......:)


0
投票

很可能这就是原因:Uncaught ReferenceError:函数未使用 onclick 定义

作为一个简短的回答:“永远不要使用 .onclick() 或用户脚本中的类似属性 [onblur()]!”


0
投票

仅供参考,

就我而言,我在函数中错过了输入变量名称。

var myVar = "";

但在函数中,它在“my Var”中输入了包含空格,然后我在控制台上看到了以下消息。

'函数 xxx 未定义'


0
投票

就我而言(我使用的是

asp:UpdatePanel
),如果脚本仅在
async post back
之后出现在页面中,它将不会被执行,也不会被任何JavaScript或浏览器控制台访问(
undefined
),所以我切换新脚本中的任何
button
结果都会在发回
sync post back
后出现。


0
投票

这发生在我身上,因为我已经有一个名为reset的var,并且函数名称也被重置了。

var reset = document.querySelector();

function reset() {
};

0
投票

如果有人有同样的问题。

我的问题是我有

await
关键字,但函数在函数声明前面没有
async
。它导致所有函数抛出未定义的错误。


0
投票

我尝试将函数绑定到窗口对象,以便它起作用!

window.func = arg => console.log('=\\')

0
投票

我使用 PHP 并遇到了同样的问题。我通过在文件中定义函数然后将其包含在我的母版页的顶部来解决这个问题。


0
投票

我收到错误,因为我的函数代码有错误。 请检查浏览器控制台面板中是否有任何错误消息。希望它会有所帮助。快乐编码。


0
投票

我经常遇到的一个问题是 Chrome 的缓存近乎过度,并且拒绝更新脚本。我向单独的脚本文件添加了一个新函数,并且遇到了这个确切的问题。使用 Chome 的开发工具,我发现本应包含该函数的脚本文件中没有,这是因为它使用的是我添加新函数之前的脚本的缓存版本。

打开开发工具(检查元素),右键单击刷新按钮并选择清空缓存和硬重新加载


0
投票

您可以设置设置间隔和清除间隔

         var refreshIntervalId =setInterval(function () {
                    YourFunction();
 if (typeof YourFunction != undefined){
     clearInterval(refreshIntervalId);
    }
}, 500);


0
投票

删除脚本标签中的类型。我添加了 type="module" 用于导入和导出。但正因为如此,一些与模块类型不兼容的代码将被跳过。 所以会给出方法未定义的错误。


-2
投票

尝试从

type="text/javascript"
标签中删除
<script>

© www.soinside.com 2019 - 2024. All rights reserved.