Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 3 Rails尝试在更改下拉列表时提交表单_Ruby On Rails 3_Forms_Submit - Fatal编程技术网

Ruby on rails 3 Rails尝试在更改下拉列表时提交表单

Ruby on rails 3 Rails尝试在更改下拉列表时提交表单,ruby-on-rails-3,forms,submit,Ruby On Rails 3,Forms,Submit,我的Ajax工作,内置Rails javascript,带有提交按钮。但是,我希望它提交时,我改变下拉框的值,并消除按钮。在我的研究中,我找到了看起来正确的解决方案,但我没有收到服务器的请求。这是我的下拉表单代码,请注意,在我添加:onchange: <% form_tag('switch_car', :method => :put, :remote => true) do %> <div class="field"> <label>C

我的Ajax工作,内置Rails javascript,带有提交按钮。但是,我希望它提交时,我改变下拉框的值,并消除按钮。在我的研究中,我找到了看起来正确的解决方案,但我没有收到服务器的请求。这是我的下拉表单代码,请注意,在我添加:onchange:

<% form_tag('switch_car', :method => :put, :remote => true) do %>
  <div class="field">
    <label>Car Name:</label>
    <%= select_tag(:id, options_from_collection_for_select(active_cars, "id", "name"), 
       :onchange => ("$('switch_car').submit()"))%><%= submit_tag "Switch Car" %>
  </div>    
<% end %>
:put,:remote=>true)do%>
车辆名称:
(“$('switch_car')。submit()”)%>
以下是生成的HTML:

<form accept-charset="UTF-8" action="switch_car" data-remote="true" method="post">
  <div style="margin:0;padding:0;display:inline">
    <input name="utf8" type="hidden" value="&#x2713;" />
    <input name="_method" type="hidden" value="put" />
    <input name="authenticity_token" type="hidden" value="PEbdqAoiik37lcoP4+v+dakpYxdpMkSm7Ub8eZpdF9I=" />
  </div>
  <div class="field"> 
    <label>Car Name:</label> 
    <select id="id" name="id" onchange="$('switch_car').submit()">
      <option value="9">Truck</option>
      <option value="10">Car</option>
    </select>
    <input name="commit" type="submit" value="Switch Car" /> 
</div> 

车辆名称:
卡车
汽车

提前感谢您的帮助

根据您使用的js库:

原型:
:onchange=>(“$('switch_car')。submit()”

Jquery:
:onchange=>(“$”(“#开关车”).submit()”


如果您使用的是默认版本,并且rails版本低于3.1,那么prototype就是默认库。

这就是我能够让它工作的方法。我使用:name=>“switch\u car”命名了switch\u car表单,并使用了以下javascript

:onchange => ("javascript: document.switch_car.submit();")

我仍然在寻找一个更好的答案,所以我会更新,如果我发现一些东西。出于某种原因,它不使用submit.js。它将其作为HTML进行处理,而提交按钮使用AJAX只更新不断变化的页面元素。但这是迄今为止我所能找到的最好的解决方案。

使用jQuery的更通用的解决方案(我不需要知道表单的名称)是:


用这个替换你的onchange

onchange: "this.form.submit();"

对于select_标记,只需添加:

{:onchange => "myHandler();" }
您的处理程序将在哪里:

this.form.submit();
此外,如果onchange不起作用,您可能希望尝试使用大写C的onChage

最后,确保不要将select_标记与表单select混淆

请参阅我对类似问题的回答,仅与表单选择有关


这似乎已经存在了一段时间,但我还是会发布我的发现,因为我还没有在任何地方找到这个解释

我遇到了这个问题,它很好地描述了通过
submit()
方法(带或不带jQuery或Handler)触发ajax请求时的问题。然后,作者建议形成自己的AJAX请求。这不是必需的,也不应该使用(jqueryjusgem)中的逻辑

手动触发
submit()
会出现问题,因为rails.js绑定并侦听一个名为
submit.rails
的事件。要手动触发提交,请使用

   onchange: 'javascript: $( this ).trigger("submit.rails")'
在元素或窗体上。

如果窗体为
远程:true
并且正在使用
rails ujs
,则此.form.submit()
将不起作用。在这种情况下,将进行常规提交,而不是XHR

相反,你应该:

onchange: 'Rails.fire(this.form, "submit")'

您可以阅读了解更多详细信息。

如果您想了解rails的方式ajax提交字段更改,这里是代码

<%= select_tag(:id, options_from_collection_for_select(active_cars, "id", "name"), 
data: { remote: true, url: your_ajax_route_path }%><%= submit_tag "Switch Car" %>

像这样。我希望它对您有用

没有一个解决方案对我有效,所以我使用了下面给出的解决方案

$(“#q#u dimension_id_eq”)。关于(“更改”,函数(e){
$(this).最近的(“表单”).submit();

});这是一个老问题,但上面的答案对我都不适用。它们都会导致一个text/html请求

以下工作,例如(隐藏类设置css显示:无):


连同:

<%= form.submit "Save changes", id: 'submit-button-id', class: 'hide' %>

我将rails 4.2.1与
jquery\u ujs
一起使用,它适合我:

onchange:'jQuery(this).parent().trigger(“submit”)'


OBS.:它假定元素是表单的直接子元素。您必须根据DOM树调整
parent()

您使用的是什么JavaScript库?您的:一旦更改了Ruby代码,它应该是一个JavaScript调用。@MauricioLinhares我正在使用Ruby on Rails 3安装的库。所以我需要弄清楚如何通过javascript提交表单?对不起,@MauricioLinhares我明白你的意思了。我现在正试图让rails使用远程_功能来完成这项工作,但仍然没有成功。我认为这是相当普遍的,尽管我很难找到解决办法。我只想在select?上提交表格,谢谢。我有3.0.9版,所以我尝试了第一个选项。在选择框中进行更改时,不会向服务器发送任何请求。我更新了上面的代码。你知道我哪里出了问题吗?还是不走运。无法理解它为什么不向服务器发送请求?请安装firebug(firefox插件)进行调试,然后尝试在firebug控制台上手动执行javascript,看看它是否有效,或者问题出在哪里。我使用chrome,当我打开javascript控制台时,我可以看到,当我使用上面建议的原型代码时,不会发生任何事情。如果我从上面输入javascript:code,它可以工作,但不能执行ajax。它会以完整的html刷新响应。很抱歉,您将
select
select\u标记
搞砸了。
select_tag
的签名在这里:并且只有一个选项参数。您的代码示例实际上产生了一个错误。感谢Martin您的正确性,我将对两者进行区分。这不会在使用
rails ujs
时触发ajax。请参阅下面我的答案了解详细信息。在Rails 6中,Rails不再公开。。。我的头发在不断的贬低中变得灰白。为了让它暴露出来,打开你的app/javascript/packs/application.js并将其放回全局下,例如从“@Rails/ujs”导入Rails;global.Rails=Rails。我会说,使用submit_标记,您可以将隐藏参数设置为true,如“hidden:true”,它将隐藏按钮。这很管用。这是一个快速而明显的方法来解决我忽略的问题。
input_html: { data: { remote: true, url: your_ajax_route_path } }
<%= form.radio_button :tier_id, tier.id, onchange: "$('#submit-button-id').click();" %>
<%= form.submit "Save changes", id: 'submit-button-id', class: 'hide' %>