我想调用一个JavaScript函数,该函数将取决于用户对确认框的响应。
例如,我有以下锚点:
<%= link_to 'Sign Out', destroy_session_path, confirm: 'Are you sure that you would like to sign out?', method: :delete %>
我应该放弃不引人注目的JavaScript并将我自己的jQuery回调绑定到锚点吗?
或者是否有某种神奇的方法将回调函数传递给Rails url帮助器?我没有在documentation中看到任何有关回调的讨论。
通过link_to
的源代码,我看到:confirm
修饰符传递给了convert_options_to_data_attributes方法,该方法指向这些天与Rails捆绑在一起的ujs script(通过jQuery兼容的JavaScript)。在这里,我们发现最终用户的响应是通过使用html中的confirm:complete
属性传递给名为data-confirm
的事件的。
因此看来答案是“不,您无法通过url帮助器传递回调”。但是您可以在app/javascript
中放置一个回调以监听此事件。考虑到我仍在让Rails处理事件的预防和传播,这似乎是实现目标的最简单的方法。我等待所有这些事情发生,然后调用我的函数。
$(document).on('confirm:complete', function (e, answer) {
if (answer) {
// user confirmed!
myCallbackFunction();
} else {
// user canceled!
}
});
我有类似的问题(How to use inline :confirm option for html helpers with AJAX calls?)。 @Micah的答案即使可行,也不是“ Rails 3 way”的意思。
[2020年,接受的答案对我不起作用。我最终做了这样的事情: