删除重新生成HTML时丢失的链接行为。我怎么处理这个?

时间:2014-05-19 11:39:49

标签: ruby-on-rails

如果我在页面上重新生成Rails删除链接,请执行以下操作:

<a href="/categories/19" data-method="delete" data-confirm="Are you sure?" ..>Link</a>

当这个页面加载时,Rails中的某些东西必须设置这个链接的行为,因为我得到了一个很好的&#34;你确定吗?&#34;在我承诺删除某些内容之前。但是,当我重新生成HTML时,我猜测我需要重新初始化行为,但我不确定它的来源。任何人都可以告诉我,在生成此HTML链接后是否应该再次调用该函数?感谢

3 个答案:

答案 0 :(得分:1)

如果你的意思是“你确定吗?”重新加载页面后,弹出消息无法正常工作,问题可能在于Turbolinks。看看this discussion,看看如何a)。禁用各个链接的Turbolinks; B)。为整个HTML文档禁用它;或c)。完全从你的Rails项目中删除它(可能没有明显的影响)。

答案 1 :(得分:0)

我怀疑您的问题在于您用来设置链接的JavaScript。事件的顺序是这样的:

  1. 页面加载
  2. dom ready js run并使用数据确认属性将onclick事件附加到所有内容
  3. 稍后运行其他一些js并添加一个带有data-confirm属性的新元素。这没有onclick,因为当step2发生时它不在dom中。
  4. 对此的一个解决方案是确保设置链接的js在一个函数中,当您将新元素添加到页面时可以调用该函数。然后你可以添加一个对js的调用来添加新元素。

    这样做的问题是你最终可能会将功能重新添加到已经存在的元素中,这样他们现在就有两个onclick事件,每个事件都做同样的事情(所以它会发生两次)。为了解决这个问题,你的代码可以避免将它添加到已经有该事件的元素中,或者将事件从所有可以获得onclick的元素中删除,然后应用onclick。

    或者,您可以设置代码以获取作为选择器的参数,并且它仅将onclick事件应用于具有选择器的元素内的元素**。因此,当你在dom中调用它时,你会传递“body”,然后当你执行它时,你会传递“#id-of-new-div-being-loaded”或类似的东西。

答案 2 :(得分:0)

您可以执行此操作,这将仅关闭此特定网址的turbolinks

<span data-no-turbolink><a href="/categories/19" data-method="delete" data-confirm="Are you sure?" ..>Link</a></span>