您的setActive
函數被定義爲,其範圍在$(document).ready
處理程序的範圍之內。將該函數移到該函數外部,以使其位於全局範圍內。
現在它看起來是這樣的:
$(document).ready(function()
{
// ...
function setActive(new_conversation)
{
// ...
}
});
現在它改成:
$(document).ready(function()
{
// ...
});
function setActive(new_conversation)
{
// ...
}
真的不過,你應該將內容從交互分離,並綁定在你的腳本本身的事件處理程序。喜歡的東西:
// Refers to the last clicked conversation *button*
// Initialize to empty jQuery object
var $active_conversation = $([]);
// Binding on #chat, targeting click events on .conversation_button children
$("#chat").on("click", ".conversation_button", function() {
// Hide currently active conversation
$active_conversation.hide();
$active_conversation.siblings('.conversation_button').removeClass("selected");
// Set as currently active conversation button
// Note: this refers to the clicked <div class="conversation_button">
var $this = $(this);
$active_conversation = $this.siblings('.conversation');
// Show this conversation
$active_conversation.show();
$this.removeClass("alert").addClass("selected");
});
這種方法的一些優點:
- 你並不需要爲不同的對話不同類別。通過在
$active_conversation
中存儲實際對話DOM元素(作爲jQuery對象),可以識別對話而無需任何額外的處理。
- 您可以使用
conversation
添加和刪除整個列表項目,而無需分配新的事件處理程序。在上面的示例中,的所有.conversation_button
元素的事件處理程序定義在#chat
的級別。有關此綁定機制的更多信息,請閱讀.on
(或1.731之前的.delegate
)。
在這裏,有一個updated fiddle! :-)
看起來像jquery中的一些事件處理程序試圖ajax到一個不存在的資源(load.php) –
也許有一個錯誤導致編譯問題的文件的某處,這將停止代碼運行。你看到在JavaScript控制檯中的任何錯誤? –
AJAX問題沒有這樣做 - 我有本地文件,只是不在jsFiddle。 :) – Nathanael