您的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");
});
这种方法的一些优点:
- 不同的对话不需要不同的课程。通过将实际对话 DOM 元素(作为 jQuery 对象)存储在 中
$active_conversation
,无需任何额外处理即可识别对话。
- 您可以使用 a 添加和删除整个列表项,
conversation
而无需分配新的事件处理程序。在上面的示例中,所有 元素的事件处理程序都.conversation_button
定义在#chat
. 有关此绑定机制的更多信息,请继续阅读.on
(或.delegate
1.7 之前的版本)。
在这里,有一个更新的小提琴!:-)