在DOM中添加新的jQuery函数时,如何让它们与已加载的函数通信?

在DOM中添加新的jQuery函数时,如何让它们与已加载的函数通信?,jquery,Jquery,我在网上和这个网站上搜索了很多,似乎找不到答案。如果已经有人问过,我会提前道歉。我有一个页面[index.htm],其中加载了一个包含通用函数[func.js]的外部javascript文件。我在func.js中调用的函数是show_message() 如何将JS文件加载到index.htm中: index.htm(片段) 从编辑中,您可以看到show\u message是在函数回调中定义的。这是一个问题,因为函数是在当前范围中定义的。它们不在全局范围内定义。因此,当您定义show_messa

我在网上和这个网站上搜索了很多,似乎找不到答案。如果已经有人问过,我会提前道歉。我有一个页面[index.htm],其中加载了一个包含通用函数[func.js]的外部javascript文件。我在func.js中调用的函数是show_message()

如何将JS文件加载到index.htm中:


index.htm(片段)


从编辑中,您可以看到
show\u message
是在函数回调中定义的。这是一个问题,因为函数是在当前范围中定义的。它们不在全局范围内定义。因此,当您定义
show_message
时,它仅在特定匿名函数的上下文中可用。您不能从另一个文件访问它,或者实际上不能从该文件中的匿名函数外部访问它

唯一现实的解决方法是在全球范围内对其进行定义。如果只需要一个函数,那么这相当简单:只需将函数定义粘贴在回调函数之外的全局范围内,它就可以在任何地方访问

如果有多个函数需要是全局的,最好用一个全局对象来命名它们的名称空间,因为将全局名称空间与函数混为一谈不是好的做法。这看起来像这样:

myProject = {};
myProject.show_message = function(currentPage, message, type, back_url) {
    // function body
};
myProject.hide_message = function(currentPage, message) {
    // function body
};

然后,您可以使用
myProject.show_message()

从任何地方访问这些方法。您的问题是有道理的,但是index.htm和external.htm的片段肯定会有所帮助
jQuery(function($) {

    //function for displaying message box
    function show_message(currentPage, message, type, back_url)
    {
        $("p.message_text",currentPage).html(message);
        $(".message_box img",currentPage).attr("src","/_assets/img/icon-" + type + ".png");
        if(back_url != false)
        {
            $(".close_message",currentPage).attr("href", back_url); 
        }
        $(".message_wrapper",currentPage).css("display","block");
        $(".message_box",currentPage).css("display","block");
    }   

}); //end jQuery
<a href="/external.htm">External</a>
$(document).ready(function(e) {

    $("#fdbck_form").submit(function(){

      var feedback_text = $("#feedback-text").val();
      var currentPage = $('#feedback');

      //check minimal length of searching parameter
      if(feedback_text.length == 0)
      {
        //show error message
        show_message(currentPage,'required','warning',false);
        return false;
      }
    });

});
myProject = {};
myProject.show_message = function(currentPage, message, type, back_url) {
    // function body
};
myProject.hide_message = function(currentPage, message) {
    // function body
};