我的颜色框弹出窗口中触发的事件有很多问题。目前,有一个主干视图负责用户配置文件页面。这里有一个照片库,单击它会打开一个包含照片、评论、评论输入表单等按钮的颜色框。
我放在colorbox中的html是模板本身的一个隐藏div。一切都显示得很好,但点击不会触发任何东西。我想我会尝试将事件处理程序附加到传递到colorbox函数的html中,因为我猜弹出式colorbox不在主干视图的dom中。该函数如下所示,主干视图会触发img上的单击事件。var photoBox是我希望在colorbox中显示的html。我试图将事件处理程序附加到photoBox,但没有效果。
popColorbox: function(event) {
var photoID = $(event.currentTarget).parent().attr('data-id');
var photoBox = $("#inline_example" + photoID).parent().html();
$(photoBox).on('click', '.unlike', function(){
console.log("hello");
alert("hello");
});
$(photoBox).on('click', '.like', function(){
console.log("hello");
alert("hello");
});
$.colorbox({html: photoBox});
}
你关于事件为什么没有被触发的第一个假设是正确的。在主干视图中,事件被委托给它们的根el
,就像这样,因为色彩框的元素不是视图的el
的子元素,所以它的事件不会被触发。
我认为,当您尝试直接绑定到photoBox时,事件没有被触发的原因是,colorBox插件需要一个html字符串,它使用该字符串来构建html(而不仅仅是附加您传入的节点)。
为了触发事件,您需要将它们绑定到DOM
上的某个现有更高的元素,在这种情况下,您可能需要转到文档。
$(document).on('click', '.unlike', function(){
console.log("hello");
alert("hello");
});
$(document).on('click', '.like', function(){
console.log("hello");
alert("hello");
});
也许这里事件监听器是在html上添加的,而不是选择器。请查看jQuery留档添加事件监听器。http://api.jquery.com/on/