我的网页代码是:
<!--Custom JavaScript -->
// --> This Script contains the initLoadMore function <--
<script src="/static/js/custom.min.js"></script>
<script src="/static/js/moment.min.js"></script>
<script src="/static/js/material-datetimepicker.js"></script>
<script>
$(function(){
initLoadMore("btnLoadMoreEvents","events-list");
});
</script>
脚本custom.min.js包含:
$(function(){
function initLoadMore(btnLoadMore,container){
let num_page = 2;
$("#"+btnLoadMore).click(function(){
$.get("?p="+num_page).done(function(data) {
$("#"+btnLoadMore).prop("disabled",true);
if(data.last_page == true){
$("#"+container).append(data.content);
$("#"+btnLoadMore).remove();
}else{
$("#"+container).append(data.content);
num_page = num_page + 1;
}
}).fail(function(xhr){
swal("Error", "Ha ocurrido un error al cargar m\u00E1s contenido. Por favor, int\u00e9ntalo de nuevo.", "error");
}).always(function(){
$("#"+btnLoadMore).prop("disabled",false);
});
});
}
});
控制台说Uncaught ReferenceError: initLoadMore is not defined
。该功能仅在我删除$(function(){ ... });
脚本中的custom.min.js
(文档就绪)时才有效。
为什么会这样?
答案 0 :(得分:1)
initLoadMore
是本地函数您无法从其他方面访问它
如果您删除$(function(){}
,那么它运作良好。
$(function(){}
就像一个private access modifier
。因此,您只能在范围内调用已定义的函数。
答案 1 :(得分:1)
您的函数封装在另一个函数中,因此它不是全局可用的。
如果删除函数周围的$(function(){ ... });
部分,则将其声明为全局函数,其他脚本将能够调用它。
为了封装函数,在最后调用它的时候,也许你最后可以调用脚本,然后像这样直接调用它:
(function(){
//do something
}());