web-dev-qa-db-ja.com

JavaScript関数未定義エラー(ただし、IT IS DEFINED)

ぼかしで起動する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>
8
Adam A

ブラウザ開発ツールを使用して、コンソールから手動で関数を呼び出すことができるかどうかを確認します。それでも未定義の関数が表示される場合は、次を実行します。

  • タイプミスを確認する
  • マスターページを使用する場合は、コンテナページ内にスクリプトページの参照を配置しないようにしてください(実際のページコンテンツで上書きされます。これは個人的な経験によるものですlol)
  • キャッシュをクリアしてページをリロードします
4
Jimmy Hodgson

この質問をさせてくれたのは、empty function私の名前空間

そして、calledその関数を使用すると、ページ全体が機能しなくなるerrorがありました

TypeError: MyNamespcae.myFunction is not a function

したがって、空の関数を作成しないでください。少なくとも、void(0)のようなステートメントを1つ追加してください。またはnullを返します。

1

これは、同じ変数名を持つ関数を呼び出そうとしたためにも発生しました。

var fun = fun()

1
Deke

おそらくそれが理由でしょう: ncaught ReferenceError:関数がonclickで定義されていません

簡単な答えとして:「ユーザースクリプトから.onclick()または同様の属性[onblur()]を使用しないでください!」

1
peterPP1

結局のところ、サーバー側のコードは重要ではありません。私は他のサーバーサイド言語で書かれていたかもしれません。

ブラウザでそのエラーが表示されている場合は、サーバー側コードによって生成されたjavascriptコードを確認する必要があります。

ここで、関数が実際に定義されているかどうかを確認できます。そうでない場合は、サーバー側のJavaScriptコード生成に問題があります。

0
Mestre San

参考のために、

私の場合、関数で変数名をミスタイプしました。

var myVar = "";

しかし、機能的には、「var」に空白を含めて入力すると、コンソールに次のメッセージが表示されました。

「関数xxxは未定義」

0