【问题标题】:Ruby on Rails: Submit a form as a JS based on a change in select boxRuby on Rails:根据选择框的更改以 JS 形式提交表单
【发布时间】:2012-07-26 17:52:05
【问题描述】:

我在 Rails 中有以下由 form_tag 和 select_tag 生成的 HTML:

<form accept-charset="UTF-8" action="/deployment_group/show_workflow_list" data-remote="true" id="show_workflow_list_form" method="get"><div style="margin:0;padding:0;display:inline"><input name="utf8" type="hidden" value="&#x2713;" /></div>
  <select id="folder_name_foldernames" name="folder_name[foldernames]">
    <option value="RISK_ODS" selected="selected">RISK_ODS</option>
    <option value="DETAIL_ADJUSTMENT">DETAIL_ADJUSTMENT</option>
    <option value="ODS_STAGE">ODS_STAGE</option>
    <option value="FINANCE_DM1">FINANCE_DM1</option>
  </select>
</form>

让我知道我需要编写的 JQuery 代码,以便我可以在更改下拉列表中的选择值时提交表单。请参阅here,当我使用 :onchange 时,它​​是一个 html 选项,表单作为 html 而不是 JS 表单提交。所以,我不能使用:onchange。

我知道我需要在我的 application.js 文件中写这样的东西:

$(#folder_name_foldernames).change(function(){
    $(#show_workflow_list).submit()
});

我在 application.js 文件中使用了上面的代码 但我必须删除“require_tree”。当我遇到一些错误时 所以我加了

$('#folder_name_foldernames').change = () ->
  $('#show_workflow_list_form').submit() 

到我的 deployment_group.js.coffee 文件(deployment_group 是我与上述视图相关的控制器)

但是当我更改下拉列表中的选择时,我仍然没有看到任何变化。 请帮忙。

【问题讨论】:

    标签: jquery ruby-on-rails ruby-on-rails-3


    【解决方案1】:

    我通过以下方式解决了问题:

    <%= f.select :foldernames, options_for_select(@folders, @folders.first), {}, {:onchange=>"myfunc()"}%>
    

    我加了

    <script type="text/javascript">
    function myfunc()
    {
        $('#folder_name_foldernames').change(function(){     $('#this_form').submit(); }); 
    }
    </script>
    

    并且表单被提交为 JS 而不是 HTML。如果有人可以向我解释为什么将其作为 JS 而不是 HTML 提交,那将非常有帮助 我编写时的相同代码:onchange=> this.form.submit,正在作为 HTML 提交

    【讨论】:

      【解决方案2】:

      如果你给你的&lt;form&gt;标签一个id,你可以在那里使用id。

      喜欢:

      <form accept-charset="UTF-8" action="/deployment_group/show_workflow_list" data-remote="true" id="this_form" method="get"><div style="margin:0;padding:0;display:inline"><input name="utf8" type="hidden" value="&#x2713;" /></div>
      <select id="folder_name_foldernames" name="folder_name[foldernames]"><option value="RISK_ODS" selected="selected">RISK_ODS</option>
          <option value="DETAIL_ADJUSTMENT">DETAIL_ADJUSTMENT</option>
          <option value="ODS_STAGE">ODS_STAGE</option>
          <option value="FINANCE_DM1">FINANCE_DM1</option>
      </select>
      

      然后:

      $('#folder_name_foldernames').change(function(){
          $('#this_form').submit();
      });
      

      不要忘记将选择器用引号括起来,否则会出现 JavaScript 错误。

      【讨论】:

        【解决方案3】:

        尝试将“application.js”替换为“application.js.coffee”并在文件中添加#= require_self。

        【讨论】:

        • 不,:( 当我再次出现“无法将编码转换为字符串(在 c:/Final/authorize_v1/app/assets/javascripts/application.js.coffee 中)”错误时将 application.js 重命名为 application.js.coffee 并在我的咖啡脚本中添加以下代码 -> "#= require jquery #= require jquery_ujs #= require_self $('#folder_name_foldernames').change = () -> $(' #show_workflow_list_form').submit() " 告诉我这个脚本是错的
        • 见上面我对我的问题的解决方案。非常感谢您的帮助
        • 所以你可以保留application.js,在你的代码中添加引号,比如"#folder_name_foldernames"和"#show_workflow_list",你必须包含jquery。
        • 确定我做到了,它现在正在工作。我将不得不尽快发布与另一个问题相关的另一个问题;)
        猜你喜欢
        • 2021-07-02
        • 1970-01-01
        • 1970-01-01
        • 2011-03-06
        • 2015-01-30
        • 1970-01-01
        • 2010-11-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多