0

我希望 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() 函数,并且显然运行了两个触发器语句,但第一个文件中的侦听器设置从未激活。我也尝试了一个通用的“点击”事件,但这也失败了。

有任何想法吗?我已经走到尽头了。

4

1 回答 1

0

我可能过于简化了——但是,为什么你需要在两个 JS文件之间实现“通信” ?它们是某种面向对象的模式吗?它们是否在不同的范围内运行?

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

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

// Trigger 
$('#foo').trigger('custom', params );
于 2012-05-05T17:18:53.310 回答