javascript函数一直有效,直到它被移动到.js文件中

时间:2010-11-04 23:40:48

标签: javascript jquery

我对javascript的放置有疑问。

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

在jQuery ready函数中调用nqi_search。

<script type="text/javascript" src="javascript/my1.js"> </script>
<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>


<script type="text/javascript">
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 );
            }
        });
    }); 
}
</script>

<script type="text/javascript">
jQuery(document).ready(function() {

    nqi_search ("product_search", "product_id", "product_name");    


});
</script>

4 个答案:

答案 0 :(得分:2)

是的,您使用<script>标记包含的.js文件的顺序非常重要。

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

答案 1 :(得分:1)

nqi_search使用$(function()...包装器,它与jQuery(document).ready...相同。因为它已经从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 );
            }
        });
}

答案 2 :(得分:1)

任何有效的JavaScript都可以进入.js文件,但加载它们的顺序很重要。如果您的函数依赖于jQuery,但最后加载jQuery,则会出现浏览器可能无法报告的错误。这是编程中的常见要求 - 您不能依赖尚未加载的函数和值。你需要jQuery来运行你的自定义函数,所以首先加载jQuery。

答案 3 :(得分:1)

是的,订单很重要。这至关重要!

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

<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>

补充:这将是加载/首页显示的加速。但这也意味着在包含库之前,没有任何<script> JS可以使用它们。目标是下载所有的HTML,然后下载JS。

为什么不起作用?

请确保不要在JS文件中包含<script>标记。文件应该是:

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");
}); 

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