在rails中的确认对话框中单击取消时触发“单击”事件

时间:2015-10-03 16:27:34

标签: javascript ruby-on-rails ruby twitter-bootstrap coffeescript

我正在使用这个gem(https://github.com/bluerail/twitter-bootstrap-rails-confirm)用引导模式替换标准浏览器确认对话框,并且它正在工作,但是,当“确认”或“确认”时,没有内置回调取消'按钮或选中,所以我正在尝试创建自己的按钮。

我当前正在禁用原始链接时单击它以防止用户单击两次,但是,如果在确认对话框中单击“取消”,则需要重新启用该链接。这就是我试过的:

$('#confirmation_dialog').find('.cancel').on 'click', (e) ->
    console.log('cancel was clicked')
    $('.disabled').removeClass('disabled')

问题是单击“取消”按钮/链接时不会运行。

使用Chrome JS控制台时,我可以在模态上找到正确的“取消”按钮,并使用

调用它
$('#confirmation_dialog').find('.cancel').click()

有效取消和关闭模态,但是,我的on click事件未被触发,因此按钮不会重新启用。

这是用户点击页面上的链接:

<td><%= link_to 'Cancel Appt', cancel_appointment_path(appointment), class: 'btn btn-default btn-xs btn-danger btn-disable-after-click', data: { confirm: "Are you sure you want to cancel the appointment?", commit: 'Yes', cancel: 'No' } %></td>

这会禁用该按钮,因此用户无法单击该按钮两次:

$('.btn-disable-after-click').on 'click', (e) ->
    $(this).addClass('disabled')

对于我做错的任何建议都会非常感谢,谢谢!

1 个答案:

答案 0 :(得分:1)

是因为元素(例如$('#confirmation_dialog').find('.cancel'))在你绑定它的那一点上不存在吗?

您可以使用jQuery的on方法通过指定选择器动态绑定到事件,如下所示:

$('body').on 'click', '#confirmation_dialog .cancel', (ev) ->
    $('.disabled').removeClass('disabled')

这似乎是一个可能的原因,因为对话框通常使用JavaScript添加到页面中,因此最初不存在于DOM中。虽然很难确定,但却没有看到完整的消息来源。