Ruby on Rails jQuery按钮单击填充text_field

我的edit.html.erb页面中有以下表格

  f.object %>     "5" %>   @device.device_identifier, :readonly => true, :class => "d-id", :id => "deviceIDfield" %>  "deviceIDbutton", :class => "btn btn-small btn-inverse", :type => "button" %>  "btn btn-large btn-primary", :id => "white" %>  

当单击“新设备标识符”时,我希望:device_identifier字段重新生成其值,该值当前通过Ruby方法SecureRandom.urlsafe_base64设置。 这只是生成一个随机的base64编码字符串。 我一直试图通过jQuery做到这一点但是我遇到了麻烦,因为我是Ruby on Rails和JQuery的新手。

我设置了一个名为shared.js.erb的文件,该文件位于我的javascripts目录中。 在这里,我有以下代码……

 $(document).ready(function(){ $('#deviceIDbutton').click(function () { $("#deviceIDfield").val(''); }); }) 

这是第一次单击按钮时(即它使用新字符串更新device_identifier字段),但在此之后停止工作。 我假设这是因为SecureRandom.urlsafe_base64被调用一次(当文档准备好了??)而不是每次单击按钮时。 有人可以帮助我!,我一直在敲打这个问题太久了。

我不太确定一些事情,比如为什么我不需要使用:remote => true在任何地方,如果我要使用它放在哪里?

此外,我无法确定我对jQuery应该去哪里有正确的想法,虽然它似乎在我创建的shared.js.erb文件中工作,如果有人可以推荐更好/更自然的方式会很好。

还值得一提的是,我在new.html.erb文件中有相同的按钮,我想要应用相同的function。

非常感谢!

正如您所说,随机字符串仅生成一次,但在文档准备好时则不生成。 当布局包含shared.js.erb时,它将在服务器端呈现。 这将’创建’一个带有内容的shared.js文件,例如:

 $(document).ready(function(){ $('#deviceIDbutton').click(function () { $("#deviceIDfield").val('werwe87wer78we7w8erew'); }); }) 

ready()调用中的函数在文档准备就绪时执行,并将要在click事件上执行的函数绑定到#deviceIDbutton元素。 因此,每次单击按钮时,执行相同的function,一次又一次地设置相同的随机代码。

您的function应该是对控制器中返回新安全随机代码的方法进行远程调用。 您可以使用JQuery.get()来完成此操作。

如果代码只是一个随机生成的代码,您可以在浏览器上生成一些JavaScript,避免调用服务器端。

对于调用控制器方法的示例,您可以看到此其他SO答案 。