自定义JS函数未定义问题

时间:2014-06-03 12:36:23

标签: javascript jquery

我有一个名为ShwoDialog()的js函数,它位于search.js文件中。当我运行我的应用程序然后我收到firefox ReferenceError: ShwoDialog is not defined

的错误消息

我可能在加载名为search.js的js文件之前调用函数ShwoDialog(),其中定义了函数。所以我看到了html源代码,发现ShwoDialog()在search.js文件加载后正在调用。

这是我的来源

的一小部分
<script type="text/javascript" src="/Scripts/BlockUI.js"></script>
<script type="text/javascript" src="/Scripts/jquery.ba-bbq.min.js"></script>
<script type="text/javascript" src="/Scripts/jquery.tmpl.js"></script>
<script type="text/javascript" src="/Scripts/Search.js"></script>

<script language='javascript'> 
$(document).ready(function () { ShwoDialog(); });
</script>
</form>

我猜可能是我的ShwoDialog()函数调用时所有上面的js正在加载。有没有办法确保我只在加载我的search.js文件后才调用我的函数。有任何技术是可能的,请与我讨论。谢谢           

更新

我尝试以这种方式做事但仍然没有运气

<script type='text/javascript'>
function fireWhenReady() {
    if (typeof function1 != 'undefined') {
        function1();
    }
    else {
        setTimeout(fireWhenReady, 100);
    }
}
$(document).ready(fireWhenReady);
</script>

我的ShowDialog完整代码

function ShowDialog() {
        $("#SrchDialog")
        .html('<div class="Srchloading"></div>')
            .dialog({
                autoOpen: false,
                bgiframe: true,
                height: 542,
                width: 314,
                modal: false,
                draggable: true,
                resizable: false,
                closeOnEscape: false,
                show: {
                    effect: "fade",
                    duration: 600
                },
                hide: {
                    effect: "fade",
                    duration: 500
                },
                open: function (type, data) {
                    //$(this).dialog('destroy').remove();
                    $(this).parent().appendTo('.g8');

                    var t = $(this).parent(), w = window;
                    t.offset({
                        top: (($(window).height() - 542) / 2),
                        left: (($(window).width() - 314) / 2)
                    });
                },
                close: function () {
                    //$(this).dialog('destroy').remove();
                }
            });


        $("#SrchDialog").load('SearchFeedback.aspx', function (responseTxt, statusTxt, xhr) {
            if (statusTxt == "success") {
                sHtml = responseTxt;
                sHtml = $(sHtml).find('#SrchExtract').html();
                $sHtml = $(sHtml);
                $("#SrchDialog").html(sHtml);
                $("#SrchDialog").dialog('open').show();
                BindEvent();
            }

            if (statusTxt == "error") {
                alert("Error: " + xhr.status + ": " + xhr.statusText);
            }
        });

    }

    function BindEvent() {
        $("input[id*='btnsrchSubmit']").live("click", function () {
            alert('send');
            return false;
        });

        $("#imgSrchclose").live("click", function () {
            $("#SrchDialog").closest('.ui-dialog-content').dialog('close');
            return false;
        });
    }

在search.js文件中定义的给定的ShowDialog代码。当我在按钮上调用ShowDialog函数时,它可以正常工作,但是当我在页面底部调用时,我收到的错误称为函数未定义。请告诉我ShowDialog函数有什么问题以及解决方法。

2 个答案:

答案 0 :(得分:0)

<script type="text/javascript" src="/Scripts/BlockUI.js"></script>
<script type="text/javascript" src="/Scripts/jquery.ba-bbq.min.js"></script>
<script type="text/javascript" src="/Scripts/jquery.tmpl.js"></script>
<script type="text/javascript" src="/Scripts/Search.js"></script>

<script language='javascript'> 
$(document).ready(function () { ShwoDialog(); });
</script>

Javascript将按顺序处理,因此如果您的功能未使用docuemnt.ready,它甚至可以在没有DOM的情况下运行。

将加载第一个blockui.js,然后运行。然后加载并运行jquery,因此它按顺序排列,你们都很好。

  1. 如果在代码中的任何地方发生某些错误,这可能会被中断,之后什么都不会被处理。检查控制台是否有错误。

  2. 此外,如果search.js无法加载,显然该函数将保持未定义状态。检查并确保已加载searchjs,使用chrome dev工具中的网络选项卡或firefox /中的对应项。

  3. 正如@joe所提到的,它甚至可能是一个范围问题。

  4. 在使用所有这些jquery插件之前,您是否已包含jquery

答案 1 :(得分:0)

首先尝试查看每个javascript是否实际加载,请删除对该函数的调用,并检查控制台中是否还有其他错误。当您按此顺序调用javascript时,也无需使用文档。