RubyonRails按钮单击使用jQuery填充文本字段

RubyonRails按钮单击使用jQuery填充文本字段,jquery,ruby-on-rails,textbox,buttonclick,Jquery,Ruby On Rails,Textbox,Buttonclick,我试图使用jQuery在点击按钮时填充一个文本字段,并且有一些问题。我在这里发布了一个关于这个的问题,但不确定提供的答案,因为它似乎过于复杂(它可能是正确的,但我没有实现的运气) 确认是否按照Christian在另一个问题中提到的方式或更简单的方式进行操作将非常好,并且非常感谢示例代码。正如在另一个问题中提到的,我对ROR和jQuery都是新手 关于这个问题的更多信息 该按钮存在于new和edit.html.erb中,并位于文本字段旁边的form_for块中(我有一个单独的按钮来提交表单)。我

我试图使用jQuery在点击按钮时填充一个文本字段,并且有一些问题。我在这里发布了一个关于这个的问题,但不确定提供的答案,因为它似乎过于复杂(它可能是正确的,但我没有实现的运气)

确认是否按照Christian在另一个问题中提到的方式或更简单的方式进行操作将非常好,并且非常感谢示例代码。正如在另一个问题中提到的,我对ROR和jQuery都是新手

关于这个问题的更多信息

该按钮存在于new和edit.html.erb中,并位于文本字段旁边的form_for块中(我有一个单独的按钮来提交表单)。我希望能够使用Ruby方法SecureRandom.urlsafe_base64填充该字段

  • 我使用按钮标签正确吗
  • javascript文件应该在哪里,我已经读了一些关于这方面的内容,有人提到创建一个edit.js.erb文件,并且让控制器也响应javascript。但是,我对这个过程有点不确定,因为我需要在新页面和编辑页面中使用类似的功能,一个全局jQuery功能会更好
  • 如果通过jQuery从控制器调用一个方法是正确的,那么有人可以提供一些示例代码来说明这是如何实现的,因为我在尝试时运气不好。如果可以从js.erb文件调用SecureRandom.urlsafe_base64,并在每次单击按钮时更新字段,那么这将是理想的
  • 正如在另一个问题中可以看到的那样,我得到了一些有用的东西,但现在我被卡住了,它变得非常绝望

    如果有任何帮助和示例代码,我将不胜感激


    非常感谢

    我假设您已经包含jQuery并且已经正常工作了。因此,为了简单起见,将此javascript放在app/assets/javascripts/devices.js中。如果这样做,请确保同一目录中的application.js包含“/=require_树。”(这将拉入该目录中的所有文件,包括您刚才创建的文件)。最重要的是,确保在正在呈现的布局中包含“application.js”。(可能是app/views/layouts/application.html.erb)

    app/assets/javascripts/devices.js:

    $(function(){
      $("#deviceIDbutton").click(function(e){
          $.get("/generate_device_id", function(data){
          $("#deviceIDfield").val(data);
        });
        e.preventDefault();
      })
    })
    
    然后,添加路由,以便AJAX调用知道要调用的控制器和操作

    app/config/routes.rb

    get '/generate_device_id', :to=>"devices#generate_device_id"
    
    然后,添加将调用您请求的SecureRandom方法的控制器操作

    应用程序/控制器/设备\u controller.rb

    def generate_device_id
     render :text=>SecureRandom.urlsafe_base64
    end
    

    我假设您已经包含jQuery并且已经正常工作了。因此,为了简单起见,将此javascript放在app/assets/javascripts/devices.js中。如果这样做,请确保同一目录中的application.js包含“/=require_树。”(这将拉入该目录中的所有文件,包括您刚才创建的文件)。最重要的是,确保在正在呈现的布局中包含“application.js”。(可能是app/views/layouts/application.html.erb)

    app/assets/javascripts/devices.js:

    $(function(){
      $("#deviceIDbutton").click(function(e){
          $.get("/generate_device_id", function(data){
          $("#deviceIDfield").val(data);
        });
        e.preventDefault();
      })
    })
    
    然后,添加路由,以便AJAX调用知道要调用的控制器和操作

    app/config/routes.rb

    get '/generate_device_id', :to=>"devices#generate_device_id"
    
    然后,添加将调用您请求的SecureRandom方法的控制器操作

    应用程序/控制器/设备\u controller.rb

    def generate_device_id
     render :text=>SecureRandom.urlsafe_base64
    end
    

    非常感谢你!现在每次单击时都会更新,但有一个小问题,由于某些原因,字段会更新两次,即当我单击按钮时,ID会更改,然后立即再次更改。有什么想法吗?我通过在事件中添加stopImmediatePropagation()来解决这个问题,即在e.preventDefault()下面;放置e.停止即时复制();再次谢谢你,迈克!你让我高兴极了!非常感谢你!现在每次单击时都会更新,但有一个小问题,由于某些原因,字段会更新两次,即当我单击按钮时,ID会更改,然后立即再次更改。有什么想法吗?我通过在事件中添加stopImmediatePropagation()来解决这个问题,即在e.preventDefault()下面;放置e.停止即时复制();再次谢谢你,迈克!你让我高兴极了!