我想让JS文件通过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 :(得分:0)
我可能过度简化了这一点 - 但是,为什么你需要在两个JS 文件之间实现“通信”?他们是否处于某种OO模式?它们是否在不同的范围内运行?
在任何情况下,您都可以简单地将事件处理程序绑定到{DOM}树中的document
对象(或任何其他包含的 parental 对象。
// Even binding
$('#parentalElement').bind('customEventString', function(event, params... ) {
// Handle the event
});
// Trigger
$('#foo').trigger('custom', params );