Rails 和 JavaScript,了解用户是否确认了对话框

rails and javascript, know if the user has confirmed a dialog

提问人:AgostinoX 提问时间:7/30/2014 更新时间:8/19/2020 访问量:1492

问:

在我的 rails 3.2.17 应用程序中,我有一个删除按钮:

<%= link_to 'Delete', destroy_item_path(@item), 
    method: :delete, 
    data: { confirm: "Do you confirm?"},
    id: "a_delete" 
%>

我需要在删除项目后执行一些 javascript 代码,或者更好的是:在用户确认删除该项目之后。
天真地,我向锚点添加了一个 id,并绑定了一个点击侦听器:

$("#a_delete").click(function() {
    //Has the user confirmed or canceled the operation?
} );

但是我怎么知道用户选择什么呢?我已经检查了 https://github.com/rails/prototype-ujs,但我没有弄清楚如何以及是否可以做到这一点。

javascript ruby-on-rails 不显眼的 javascript

评论


答:

1赞 Alex Tatarnikov 7/30/2014 #1

简单的方法(在项目将被销毁之后)它是作为 JS 的发送请求,rails 将呈现 destroy.js.erb,您可以在此处添加代码。很难(在销毁之前确认之后)这是一个修改轨道确认对话框 http://lesseverything.com/blog/archives/2012/07/18/customizing-confirmation-dialog-in-rails/

1赞 Keith 7/30/2014 #2

与其让 rails.js 句柄显示对话框,不如在单击处理程序中自己显示对话框并做出相应的响应:

$('#a_delete').click(function(e) {
    if(confirm('Do you confirm?') {
        alert('going to delete!');
    } else {
        e.preventDefault();
        alert('not going to delete!');
    }
} );

这将允许您在将删除请求发送到服务器之前进行处理。

评论

0赞 AgostinoX 7/30/2014
好的,这当然是一个可行的解决方案。我不喜欢的事实是开始使用“框架”,然后回退到某种“幼稚的解决方案”,因为 Farmeworks 不符合基本要求或未能记录它们
2赞 Keith 7/30/2014
您想或仅限于使用 rails prototype-ujs?如果没有,看起来 jqueyr-ujs 会触发一个事件“confirm:complete”,该事件会发送响应:github.com/rails/jquery-ujs/blob/master/src/rails.js#L256
0赞 AgostinoX 7/30/2014
每次发现问题时,我都有点不愿意切换库,因为这是一种不可重复的工作方式......如果新库有错误怎么办?我担心我最终会让每个项目都设置不同的库
0赞 Keith 7/31/2014
从我的角度来看,rails jquery-ujs 是两者中更受欢迎和维护的,如果出现问题,这个项目更有可能得到及时修复。
0赞 fran 8/19/2020 #3

单击事件在用户可以取消或确认之前发生。您可以使用窗体并捕获提交操作,该操作仅在用户确认后才会发生,如果用户取消对话框,则根本不会发生。