【问题标题】:javascript function works until it is moved into a .js filejavascript 函数一直有效,直到它被移动到 .js 文件中
【发布时间】:2011-05-05 09:11:18
【问题描述】:

我有一个关于放置 javascript 的问题。

函数 nqi_search 位于 a.js 文件之外时可以正常工作。 如果将它移到 my1.js 中,在 jquery 文件之前,或者在 jquery 文件之后移到 my2.js 中,它将失败,没有错误。我以前也遇到过类似的问题。 .js 文件可以和不可以,以及 .js 文件的顺序是否有规则?

nqi_search 在 jQuery 就绪函数中调用。

【问题讨论】:

    标签: javascript jquery


    【解决方案1】:

    是的,顺序很重要。很关键!

    最佳做法是所有 Javascript 包含应位于 html 文件的底部,就在 </body> 标记之前。例如:

    <script type="text/javascript" src="javascript/jquery.js"> </script>
    <script type="text/javascript" src="javascript/jquery-ui.js"> </script>
    <script type="text/javascript" src="javascript/my2.js"> </script>
    </body>
    </html>
    

    添加:这将加速加载/首页显示。但这也意味着在包含库之前,您的&lt;script&gt; JS 都不能使用它们。目标是下载所有的 html,然后是 JS。

    为什么它不起作用?

    请确保不要在 JS 文件中包含 &lt;script&gt; 标记。文件应该是:

    function nqi_search (type, id_name, text_name)
    {
    $(function() {
        function store_id( id ) {
            $( "#"+id_name ).val(id);
        }
    
        $( "#"+text_name ).autocomplete({
            source: "remote.php?f=nqi_search&t="+type,
            minLength: 1,
            select: function( event, ui ) {
                store_id( ui.item.id );
            }
        });
    }); 
    };
    
    jQuery(document).ready(function() {
    nqi_search ("product_search", "product_id", "product_name");
    }); 
    

    另请注意,我在您的第一个函数的关闭 { 后添加了一个分号。

    【讨论】:

      【解决方案2】:

      任何有效的 JavaScript 都可以进入 .js 文件,但加载它们的顺序很重要。如果您有依赖 jQuery 的函数,但最后加载 jQuery,您将遇到浏览器可能不会报告的错误。这是编程中的一个常见要求——您不能依赖尚未加载的函数和值。您需要 jQuery 来运行您的自定义函数,因此请先加载 jQuery。

      【讨论】:

        【解决方案3】:

        nqi_search 使用与jQuery(document).ready... 相同的$(function()... 包装器。由于它已经从 ready() 处理程序中调用,因此没有多大意义。尝试删除包装:

        function nqi_search (type, id_name, text_name)
        {
                function store_id( id ) {
                    $( "#"+id_name ).val(id);
                }
        
                $( "#"+text_name ).autocomplete({
                    source: "remote.php?f=nqi_search&t="+type,
                    minLength: 1,
                    select: function( event, ui ) {
                        store_id( ui.item.id );
                    }
                });
        }
        

        【讨论】:

        • 你说得对,我应该删除包装,谢谢。但是,如果我将它移到它自己的 .js 文件中,它仍然不起作用,我将其包含在所有其他文件的末尾。
        • 我不明白“不起作用”。你有任何错误吗?
        【解决方案4】:

        是的,您包含在&lt;script&gt; 标记中的 .js 文件的顺序很重要。

        看起来您的函数正在使用 jQuery,但您在 my1.js 之后包含了 jquery.js 文件。您可能应该先包含 jQuery 和其他库。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-01-14
          • 1970-01-01
          • 2019-07-06
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多