【问题标题】:Prevent Rails link_to_remote multiple submits w Javascript防止 Rails link_to 使用 Javascript 远程多次提交
【发布时间】:2010-12-23 05:28:32
【问题描述】:

在 Rails 项目中,我需要防止 link_to_remote 被双击。看起来 :before 和 :after 是我唯一的选择——它们分别被添加/附加到 onclick Ajax 调用中。但如果我尝试类似:

:before => "self.stopObserving()"

Ajax 永远不会运行。如果我在运行 Ajax 之后尝试它,但链接永远不会停止观察。

我见过的解决方案依赖于创建一个变量并阻止整个表单,但是此页面上有多个 link_to_remote 行,一次单击多个行是有效的 - 只是两次不一样.在 link_to_remote 之外声明的每行一个变量似乎非常笨拙...

我最初没有使用 Prototype,而是首先尝试使用纯 Javascript 进行概念验证 - 但它也失败了:

点击

点击时只是发出警报 - 这里的 lambda 什么都不做?下一个更像是预期的目标,应该只在第一次提醒。但它每次都会发出警报:

点击

感谢所有想法!

【问题讨论】:

  • 什么是“自我”?不应该是“这个”吗?

标签: javascript ruby-on-rails onclick link-to-remote double-submit-prevention


【解决方案1】:

我使用 jQuery 让它工作:

link.click(function() { 
  alert('foo'); 
  $(this).unbind('click'); 
  $(this).click(function() { 
    return false; 
  }); 
  return false; 
})

所以你当然可以用普通的旧 javascript 完成同样的事情。

使用 jQuery 执行此操作的好处是可以轻松地将类添加到您希望以这种方式运行的所有链接,并且在您的 application.js 中您可以将此行为分配给该类的所有链接。

当然,您也可以使用普通的旧 JavaScript 来完成所有这些操作……jQuery 只是让它变得更容易。

【讨论】:

  • 无法将其转换为内联调用。事实上,FF3.6 中的 Firebug 声称在 jQuery 1.3 中没有 $(this).unbind,尽管文件中出现了“unbind:function”。 StackOverflow 点击
  • 我建议你避免内联调用。 jQuery 是关于不显眼的 JavaScript。如果你把它放在一个所有页面都将加载的 JavaScript 文件中,你可以将此行为分配给某个类的所有链接。我还建议你升级到更新的 jQuery
猜你喜欢
  • 2012-06-16
  • 2012-10-07
  • 2013-02-21
  • 2011-03-08
  • 2016-10-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多