我对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>
答案 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");
});
另请注意,我在第一个函数关闭后添加了一个分号。