1

我有一个 rails 项目,在弹出窗口中有一个标准的 rails delete 链接。

我在页面上有多个弹出窗口,所以我有一个附加到正文的隐藏操作(onclick)和一个附加到弹出窗口的 stopPropagation 事件,以便在弹出窗口内单击不会隐藏它,但单击其他​​任何地方将隐藏所有弹出窗口。

但是,这似乎影响了我的删除链接,这些链接位于弹出窗口中。这似乎迫使他们获取而不是发布,这意味着他们没有删除。并且没有出现确认对话框。

如果我将删除链接移到弹出窗口之外,它会按预期工作。

一些代码:

$('body').click(function() {
    $('.popover').hide();
});
$('.popover').click(function(ev){
    ev.stopPropagation();
});

和 rails (Haml) 视图:

.popover
    = link_to [task], :confirm => 'Are you sure you want to delete?', :method => :delete, :remote => true

如何使用 stopPropagation 让 delete 在父级内部工作?

感谢帮助。

4

2 回答 2

1

将 jQuery.not()函数与 CSS*选择器结合使用:

$('body *').not('.popover, .popover *').click(function() {
    $('.popover').hide();
});

完整文档:http ://api.jquery.com/not/

工作 JSFiddle:http: //jsfiddle.net/ryanbrodie/nGcaP/7/

于 2013-05-01T07:35:22.470 回答
-1

它之所以不起作用,是因为这些行。

$('.popover').click(function(ev){
   ev.stopPropagation();
});

它们阻止所有 javascript 在弹出窗口中单击的任何内容上执行。这会将您的链接变成没有任何 javascript 的标准链接,因此不会执行发布请求。

您可以通过使用 jQuery*和 RyanBrodie 建议的选择器来解决这个问题。

$('body *').not('.popover').click(function() {
  $('.popover').hide();
});

要确保弹出框内的元素不会触发隐藏弹出框,请执行以下操作:

$('body *').not('.popover').not('.popover *').click(function() {
  $('.popover').hide();
});
于 2013-05-01T07:38:54.637 回答