Rails破坏与Jquery AJAX确认

时间:2009-08-05 16:48:49

标签: jquery ruby-on-rails

我大部分时间都在工作。我的rails链接是:

<%= link_to(image_tag('/images/bin.png', :alt => 'Remove'), @business, :class => 'delete', :confirm => 'Are you sure?', :id => 'trash') %>

:class => "delete"正在调用ajax函数,以便将其删除,并且页面不会刷新,效果很好。但由于页面没有刷新,它仍然存在。所以我的id垃圾正在调用这个jquery函数:

$('[id^=trash]').click(function(){
            var row = $(this).closest("tr").get(0);
            $(row).hide();
            return false;
});

隐藏了我点击的垃圾图标的行。这也很有效。我以为我把它全部解决了然后我遇到了这个问题。当你点击我的垃圾箱时,我会弹出这个确认框,询问你是否确定。无论你选择取消还是接受,jquery都会触发并隐藏行。它不会被删除,只有在您刷新页面时才会被隐藏。我尝试更改它以便通过jquery完成提示,但是无论我在提示中选择什么,rails都会删除该行,因为在调用提示时正在调用.destroy函数。

我的问题是我如何才能获得取消或接受来自rails确认弹出窗口的值,以便在我的jquery中我可以有一个if语句,如果他们单击“接受”则隐藏,如果单击取消则不执行任何操作。

编辑:回答下面的问题。 那没用。我尝试将链接更改为:

<%= link_to(image_tag('/images/bin.png', :alt => 'Remove'), @business, :class => "delete",  :onclick => "trash") %>

并将其放入我的jquery

function trash(){
if(confirm("Are you sure?")){
    var row = $(this).closest("tr").get(0);
    $(row).hide();
    return false;
} else {
//they clicked no.
}
}

但是这个功能从未被调用过。它只是删除它没有提示,并没有隐藏它。 但这给了我一个想法。

我接受了ajax正在调用的删除功能

     $('a.delete').click (function(){
            $.post(this.href, {_method:'delete'}, null, "script");
            $(row).hide();
});

并修改它实现你的代码:

删除:confirm => 'Are you sure?'

$('a.delete').click (function(){
        if(confirm("Are you sure?")){
            var row = $(this).closest("tr").get(0);
            $.post(this.href, {_method:'delete'}, null, "script");
            $(row).hide();
            return false;
        } else {
            //they clicked no.
            return false;
        }

});

这就是诀窍。

4 个答案:

答案 0 :(得分:13)

删除:confirm =&gt; “你确定吗?”

$('a.delete').click (function(){
            if(confirm("Are you sure?")){
                var row = $(this).closest("tr").get(0);
                $.post(this.href, {_method:'delete'}, null, "script");
                $(row).hide();
                return false;
            } else {
                //they clicked no.
                return false;
            }

    });

答案 1 :(得分:5)

谢谢大家,我使用以下教程来设置带有rails的jquery:

http://www.notgeeklycorrect.com/english/2009/05/18/beginners-guide-to-jquery-ruby-on-rails/

与本教程一起使用时,我使用了以下代码:

Query.fn.deleteWithAjax = function() {
    this.removeAttr('onclick');
    this.unbind('click', false);
    this.click(function() {
        if(confirm("Are you sure?")){
            $.delete_($(this).attr("href"), $(this).serialize(), null, "script");
            return false;
        } else {
            //they clicked no.
            return false;
        }
    })
    return this;
};

答案 2 :(得分:3)

您可以删除:

:confirm => 'Are you sure?'

并将其替换为自定义onclick事件,如下所示:

<%= link_to(image_tag('/images/bin.png', :alt => 'Remove'), @business, :class => 'delete', :onclick => 'someJSFunction', :id => 'trash') %>

然后,在您的application.js(或任何其他JS文件)中,执行:

function someJSFunction(){
  if(confirm("Are you sure?"){
    //they clicked yes.
  } else {
    //they clicked no.
  }
}

抱歉,我现在没有时间对其进行测试,但工作。

答案 3 :(得分:3)

我遇到了类似的问题,但在阅读完这个帖子后,我从我的按钮中删除了确认,并在jquery中执行了以下操作:

$('.delete_post').on('click', function(){ if(confirm("Are you sure?")){ $(this).closest('tr').delay().fadeOut(); } else{ return false; } });

它似乎为我做了伎俩。我还将此添加到控制器中的destroy动作中:

 respond_to do |format|
  format.html { render :nothing => true }
  format.json { head :no_content }

P.S。不要忘记添加:remote =&gt; true到link_to