【问题标题】:Rails, remove flash message generated via ajaxRails,删除通过 ajax 生成的 flash 消息
【发布时间】:2016-07-26 12:04:18
【问题描述】:

我有一条由 ajax 响应生成的 Flash 消息。 在我的控制器中,我有:

def destroy
  flash[:danger] = "Successfuly destroyed"
  format.js
end 

调用destroy.js.erb文件

$('#flash_messages').html("<%= escape_javascript (render partial: 'layouts/flash_messages') %>");

呈现部分显示 Flash 消息。这部分看起来像这样:

#flash_messages
  -flash.each do |key, value|
    = content_tag(:div, value, class: "flash alert alert-#{key}")

我想在 2 秒后使用 jquery 删除 flash 消息。我尝试的是:

$(".alert").fadeTo(2000, 500).slideUp(500, function(){
  $(".alert").alert('close');
});

然而,它没有找到 .alert 类,因为它是在页面加载后生成的。这个问题的解决方法是什么:?谢谢!

【问题讨论】:

  • 您可以在destroy.js.erb文件中编写Jquery代码。然后它将起作用。您需要在$('#flash_messages').html(" 行之后添加jQuery 代码。你试过了吗?
  • 成功了。将其添加为答案,以便我可以将其标记为已接受。谢谢!
  • 还有其他方法可以执行您的代码。就像在 Ajax 完成时执行代码一样,来自 success 回调。在这种情况下,您不需要将 JS 放入 destroy.js.erb 中。但无论哪种方式,它都会起作用。

标签: javascript jquery ruby-on-rails ajax flash-message


【解决方案1】:

当实际的 DOM(如 &lt;div class='alert'.. 不存在)时,您的 JS 已加载到页面中。所以,绑定没有发生。解决这个问题的一种方法,将 JS 代码放在 destory.js.erb 文件中,在文件渲染逻辑之后。另一种方法是从特定元素的 Ajax 调用的 success 回调中执行 JS 代码。

【讨论】:

    猜你喜欢
    • 2018-04-05
    • 2011-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多