2012-05-05 145 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