2012-05-05 42 views
0

我想让JS文件通过jQuery事件相互通信,并认为它会非常直接,但遇到了问题,我认为我需要帮助。jQuery自定义事件不起作用

基本上我使用ID为'#nav-controller'的DOM元素充当两个JS文件之间的信使。第一个文件 - 我已经检查其执行的第一个 - 监听两个自定义事件:

function external_command_listener() { 
    // Click Handling 
    $('#nav-controller').on('clickhandler' , function (e , param) { 
     alert ("registering clicks to: " + param); 
     register_qs_click_handler (param); 
    }); 
    // Menu Control handling 
    $('#nav-controller').on('controlframework' , function (e , param) { 
     alert ('registering menu handling to: ' + param); 
     register_qs_control_framework (param); 
    }); 
} 

现在,这是设置。第二个文件使用trigger()来有效地调用第一个文件中的函数。下面的代码:

function Initialise_Navigation() { 
    navTemplate = Template_File_Name ('navigation'); 
    $.get(navTemplate , function (data) { 
     $('#page-nav-system').html(data); 
     $('#nav-controller').trigger('clickhandler' , ['#application li']); // register a click handler 
     $('#nav-controller').trigger('controlframework' , ['.quicksand-cntrl']); // register a control framework 

我一直在使用Chrome的调试程序,它并执行Initialise_Navigation()函数,并反过来显然都运行触发声明,但在第一个文件从未激活监听器设置进行测试。我也尝试过,只是一个普通的'点击'事件,但也失败了。

任何想法?我在我的绳索末端。

回答

0

我可能会过度简化这个 - 但是,为什么你需要在两个JS 文件之间实现“通信”?他们是否处于某种OO模式?他们是否在不同的范围内运行?

在任何情况下,你可以简单地绑定的事件处理程序document对象(或任何其他包含在您的DOM树有父母对象。

// Even binding 
$('#parentalElement').bind('customEventString', function(event, params...) { 
    // Handle the event 
}); 

// Trigger 
$('#foo').trigger('custom', params); 
+0

用于通信的基本原理是,有两个有责任的组件,并且我想保持依赖关系最小化(也就是说,可以与适当的JS事件进行通信),这也可以帮助确保这些对象之间的同步已经实现了 – ken

+0

我认为你展示的代码实际上和我的是一样的,不是吗?你的#parentalElement是我的#nav控制器。 – ken

+0

问题我'我真的试图深入研究的是,为什么我的听众实际上没有选择由“触发”方法触发的事件。 – ken