Rails,Popups,Ajax删除和stopPropagation

时间:2013-05-01 07:28:54

标签: ruby-on-rails ajax jquery stoppropagation

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

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

然而,这似乎正在影响我的删除链接,这些链接位于弹出窗口内。它似乎迫使他们取代而不是发帖,这意味着他们不会删除。并且不会出现确认对话框。

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

一些代码:

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

导轨(Haml)查看:

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

如何使用stopPropagation删除在父级内部工作?

感谢帮助。

2 个答案:

答案 0 :(得分:1)

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

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

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

使用JSFiddle:http://jsfiddle.net/ryanbrodie/nGcaP/7/

答案 1 :(得分:-1)

它不起作用的原因是因为这些行。

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

他们停止在弹出窗口内点击的任何内容上执行所有javascript。这会将您的链接转换为标准链接,而无需任何JavaScript,因此不会执行帖子请求。

您可以使用jQuery而不是*选择器来解决这个问题,正如RyanBrodie建议的那样。

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

要确保popover中的元素不触发隐藏,请执行以下操作:

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