【问题标题】:How do I submit a Rails AJAX form using onclick如何使用 onclick 提交 Rails AJAX 表单
【发布时间】:2015-04-19 02:35:38
【问题描述】:

如何使用按钮在 Rails 中提交 AJAX 表单?

我的代码:

Controller:

def list
  @events = ExternalEvent.all
  if !params[:city_id].nil?
    @events = @events.where(city_id: params[:city_id])
  end
  respond_to do |format|
    format.js
    format.html
  end
end

list.js.erb:

$('#events').html("<%= j render 'events' %>");

list.erb:

<%= javascript_include_tag "jquery" %>
<%= javascript_include_tag "application" %>
<div id='events'>
  <%= render 'events' %>
</div>

_events.erb:

<%= form_tag('/list', remote: true) do %>
  <input name='city_id' value='2'>
  <input type='Submit'>
<% end %>
<table>
  <% for event in @events %>
    <tr>
      <td>
        <%= event.name %>
      </td>
    </tr>
  <% end %>
</table>

点击提交后,AJAX 表单提交成功。

但是我如何从表单外部提交表单。 使用

<input type='button' onclick="document.getElementById('get_event').onsubmit()" value="Change City">

返回一个 JavaScript 错误

Uncaught TypeError: object is not a function
  onclick

如何在外部提交此表单?

【问题讨论】:

    标签: javascript jquery ruby-on-rails ajax forms


    【解决方案1】:

    使用以下方式

    <form id="get_event">
    <input type='button' onclick="document.getElementById('get_event').submit();" value="Change City">
        </form>
    

    issubmit() 不是函数,但 submit() 是。

    对于 AJAX 使用 Ajax 调用提交表单而无需重新加载页面:

    <form id="get_event">
    <input type='button' onclick="submitFrmAjax();" value="Change City">
    </form>
    
    <script>
        function submitFrmAjax(){
           $.ajax({
        //Your ajax code here to submit from via AJAX. refer jquery site . I gave sample eg.
                 url : "Your URL or file name on server",
                 data : $("form").serialize()
            });
        }
    </script>
    

    Demo for Regular Submit

    Demo : Sample ajax submit , see network tab in firebug

    【讨论】:

    • 请参考api.jquery.com/jquery.ajax。它包含URL、要发送的数据、返回数据的数据类型等。
    • 工作...谢谢.. 但我认为 Rails 应该明确地做这件事
    • @Zeutheus,没有 Ruby 是像 PHP 这样的服务器端语言。而 ajax , jquery 用于前端。所以无论你在服务器端使用什么。 AJAX , jquery 对于 All like HTML 是相同的。 :)
    • 我知道没关系,但仅供参考,当我使用 Rails 2.3 时,onsubmit() 仍然有效......它执行 AJAX 提交......
    【解决方案2】:

    我认为你的问题出现在这里

    <%= form_tag('/list', remote: true) do %>
    

    改变这个

    <%= form_tag(:list, :url => '/list', remote: true) do %>
    

    如果列表模型是可访问的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-20
      相关资源
      最近更新 更多