提问者:小点点

如何将事件附加到主干中的色框弹出窗口?


我的颜色框弹出窗口中触发的事件有很多问题。目前,有一个主干视图负责用户配置文件页面。这里有一个照片库,单击它会打开一个包含照片、评论、评论输入表单等按钮的颜色框。

我放在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});

  }

共2个答案

匿名用户

你关于事件为什么没有被触发的第一个假设是正确的。在主干视图中,事件被委托给它们的根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/