0

ヘッダーにいくつかの JavaScript ファイルをロードする Web ページがあります。一部のサブページは、追加の JavaScript ファイルをロードします。メインページではすべて正常に動作していますが、サブページでは次のような多くの例外が発生します:

キャッチされていない TypeError: オブジェクト [オブジェクト オブジェクト] のプロパティ '$' は関数ではありません

この例外は、details.js、voteHandler.js、および HTML ページ自体で 4 回発生していることがわかります。例外は常にこの行でスローされます:

$("document").ready(function () {

これは、機能するメインページがどのように見えるかです:

<head>
        <script type="text/javascript" src=/Scripts/jquery-1.7.1.min.js></script>
        <script type="text/javascript">
            //URL for voting
            var _postVoteUrl = 'http://localhost:5215/Post/Vote'
            //URL for tags
            var _tagsUrl = 'http://localhost:5215/Post/Tags'

            //Keep track of if a cascading is loading, if so, cancel submits
            var cascadingControlLoading = false;
            window.latestClick = '';

            function IsNotDblClick(objectID) {
                if (window.latestClick != objectID &&
                    !cascadingControlLoading) {
                    window.latestClick = objectID;
                    return true;
                } else {
                    return false;
                }
            }

            $(document).ready(function () {
                if($('#rightCon').text().trim().length < 1)
                {$('#rightCon').hide();}
            });

        </script>
        <script type="text/javascript" src=/Scripts/jquery-ui-1.8.20.min.js>"></script>
        <script type="text/javascript" src=/Scripts/jquery.elastic.source.js></script>
        <script type="text/javascript" src=/Scripts/jquery.validate.min.js></script>
        <script type="text/javascript" src=/Scripts/jquery.validate.unobtrusive.min.js></script>
        <script type="text/javascript" src=/Scripts/jquery.qtip.min.js></script>  
        <script type="text/javascript" src=/Scripts/formhandler.js></script>
        <script type="text/javascript" src=/Scripts/taghandler.js></script>
        <script src="/Scripts/voteHandler.js"></script>
        <script type="text/javascript" src=/Scripts/select2.min.js %>"></script>

    <script>
        function TogglePostCon() {
            $('#postListEditorCon').toggle();
        }


        SetupTagTextBox("txtTagBox", false);
        SetupTagTextBoxPersonalTag("txtPersonalTagBox", true);
        SetupTagTextBoxPersonalTag("txtPersonalIgnoreTagBox", true);
    </script>

        <script src="/Scripts/modernizr-2.5.3.js"></script>
    </head>

そして、これは例外をスローするサブページです:

    <head>
            <script type="text/javascript" src=/Scripts/jquery-1.7.1.min.js></script>
            <script type="text/javascript">
                //URL for voting
                var _postVoteUrl = 'http://localhost:5215/Post/Vote'
                //URL for tags
                var _tagsUrl = 'http://localhost:5215/Post/Tags'

                //Keep track of if a cascading is loading, if so, cancel submits
                var cascadingControlLoading = false;
                window.latestClick = '';

                function IsNotDblClick(objectID) {
                    if (window.latestClick != objectID &&
                        !cascadingControlLoading) {
                        window.latestClick = objectID;
                        return true;
                    } else {
                        return false;
                    }
                }

                $(document).ready(function () {
                    if($('#rightCon').text().trim().length < 1)
                    {$('#rightCon').hide();}
                });
            </script>
            <script type="text/javascript" src=/Scripts/jquery-ui-1.8.20.min.js>"></script>
            <script type="text/javascript" src=/Scripts/jquery.elastic.source.js></script>
            <script type="text/javascript" src=/Scripts/jquery.validate.min.js></script>
            <script type="text/javascript" src=/Scripts/jquery.validate.unobtrusive.min.js></script>
            <script type="text/javascript" src=/Scripts/jquery.qtip.min.js></script>  
            <script type="text/javascript" src=/Scripts/formhandler.js></script>
            <script type="text/javascript" src=/Scripts/taghandler.js></script>
            <script src="/Scripts/details.js"></script>
            <script src="/Scripts/voteHandler.js"></script>
       <script>
$(function () {

                //Google +1
                $.getScript("http://apis.google.com/js/plusone.js", null, true);

                //Twitter
                $.getScript("http://platform.twitter.com/widgets.js", null, true);

                //Facebook
                $.getScript("http://connect.facebook.net/en_US/all.js#xfbml=1", function () {

                    $('body').append('<div id="fb-root"></div>');

                    FB.init({ status: true, cookie: true, xfbml: true });

                }, true);
            });
    </script>

        <script src="/Scripts/modernizr-2.5.3.js"></script>
    </head>

以前にボディの下部にロードされたスクリプトのいくつかを持っていましたが、これは例外を生成しませんでしたが、私が読んだことから、これは推奨される方法ではありません。

では、なぜ私のサブページでこれらの例外が生成されるのでしょうか?

4

1 に答える 1

0

「非競合」モードでは、$ ショートカットは使用できず、jQuery がより長く使用されます。

jQuery(document).ready(function ($) {

関数呼び出しの後に括弧で $ を含めることにより、コード ブロック内でこのショートカットを使用できます。

コードを置き換えます

$(document).ready(function () {
                    if($('#rightCon').text().trim().length < 1)
                    {$('#rightCon').hide();}
                });

これとともに

jQuery(document).ready(function ($) {
                    if($('#rightCon').text().trim().length < 1)
                    {$('#rightCon').hide();}
                });
于 2013-09-21T08:21:18.517 に答える