gpt4 book ai didi

javascript - 以 Rails 4 形式将
    列表作为参数数组提交,使用 javascript 将 params 值添加到 params 哈希

转载 作者:行者123 更新时间:2023-11-28 01:32:58 25 4
gpt4 key购买 nike

我有一个 Rails 4 表单,它在表单页面上使用 AJAX 构建部件列表。一旦在 <ul> 中构建了零件列表,我想将列表作为 params 哈希中的参数值数组提交。

我的表格:

<%= form_for ([@tool, @service]),:html => { :onSubmit => 'getParts' } do |f| %>
<% if @service.errors.any? %>
<div id="error_explanation">
<h2><%= pluralize(@service.errors.count, "error") %> prohibited this service from being saved:</h2>

<ul>
<% @service.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
</div>
<% end %>

<div class="row">

<div class="span4 offset1">

<div class="form-inline">
<%= f.hidden_field :tool_id , :value=>params[:tool_id] %>
<%= f.label :name %><br>
<%= f.text_field :name %>
</div>
<br>
<br>
<div class="form-inline">
<%= f.label :due_date %><br>
<%= f.text_field :due_date, 'data-behaviour' => 'datepicker' %>
</div>
<br>
<br>
<div class="form-inline">
<%= f.label :completed %><br>
<%= f.text_field :completed, 'data-behaviour' => 'datepicker' %>
</div>
<br>
<div class="field">
<%= f.label 'Service Type:' %>
<%= f.select :service_type_id, ServiceType.all.collect{|s| [s.name, s.id] }, {include_blank: false} %>
</div>
<br>

</div>

<div class="span7">
<div class="form-inline">
<div class="part_list_element">
Parts Used <br>
<%= text_field_tag :parts_used %>
</div>
</div>
<br>

Default Parts:
<ul id="serv_parts_list">

</ul>
<br>
<br>

<div class="form-inline">
<%= f.label :note %><br>
<%= f.text_area :note %>
</div>
<br>
<br>
<div class="actions">
<%= f.submit %>
</div>

</div>
</div>

<% end %>

当用户从选择列表中选择默认服务时,将触发以下 JavaScript:

$('#service_service_type_id').change(function() {
var id = this.value;
$.ajax
({
url:'/get_default_parts',
type:"POST",
data: {
service_type: {
id: id
}
}
});
});

这会根据选择从数据库获取零件列表。然后它通过 JS 返回一个数组,然后将其附加到空的默认部件列表中:

  Default Parts:
<ul id="serv_parts_list">

</ul>

变成:

 <ul id="serv_parts_list">
<li id="042511060272">042511060272 - Stihl/Denso Spark Plug W22mp-u<a class="service_parts">&lt;-Remove</a></li>
<li id="795711145835">795711145835 - Bar Oil - Stihl<a class="service_parts">&lt;-Remove</a></li>
<li id="795711478179">795711478179 - Stihl MS660/066 Air Filter<a class="service_parts">&lt;-Remove</a></li>
</ul>

在我的application.js中,我有:

$(document).ready(function(){
$("#commit").click(function() {
$("#expended_parts").val(('#serv_parts_list').text());
});
});

但这没有任何作用。我一直在试图弄清楚如何获得 <li> <ul> 中的元素放入数组并作为参数传递。但当前的 params 哈希看起来像:

Parameters: {"utf8"=>"✓",   "authenticity_token"=>"s/....=", "service"=> 
{"tool_id"=>"113", "name"=>"test without hash", "due_date"=>"", "completed"=>"",
"service_type_id"=>"2", "note"=>""}, "parts_used"=>"", "commit"=>"Create Service"}

由于部件列表在页面加载后可以多次更新,可以通过 AJAX 调用获取附加到 <li> 的默认部件列表。 ,我认为这必须绑定(bind)到 submit事件。任何帮助表示赞赏。

最佳答案

我想得太多了,找到了一个更简单的答案。我已经很久没有从事这方面的工作了,所以我不得不回顾我的工作来刷新我的内存。

基本上,我有构建插入默认部分的 Javascript 和添加为复选框列表的任何部分,并且其框已被选中。这样,如果用户决定不需要默认部分之一,或者想要删除某个部分,他们只需取消选中该框即可,并且不会随表单一起提交。空复选框列表以上面所示的形式开始,如下所示:

     Default Parts:<br>
<div id="default_parts_list" class="checkbox inline">

</div>
<br>
Other Parts:<br>
<div id="parts_expended" class="checkbox inline">

</div>
<br>
<br>

当表单上的服务类型下拉列表发生更改时,它会触发我上面的问题中显示的 JavaScript。这会获取零件列表并将其交给此 JS:

$("#default_parts_list").empty();

$("#default_parts_list").append('<%= escape_javascript(render :partial => 'get_default_parts' ) %>');

从而呈现 _get_default_parts 部分:

  <%= collection_check_boxes(:service, :part_ids, @parts_list, :id, :sku_name, {}, {checked: true}) do |b| %>
<%= b.label { b.check_box + b.object.name + " " + b.object.sku} %>
<% end %>

这将创建附加到表单的 html,如下所示:

<div id="default_parts_list" class="checkbox inline">

<label for="service_part_ids_14">
<input checked="checked" id="service_part_ids_14" name="service[part_ids][]" type="checkbox" value="14">Stihl/Denso Spark Plug W22mp-u 042511060272
</label>

<label for="service_part_ids_24">
<input checked="checked" id="service_part_ids_24" name="service[part_ids][]" type="checkbox" value="24">Bar Oil - Stihl 795711145835
</label>

<label for="service_part_ids_10">
<input checked="checked" id="service_part_ids_10" name="service[part_ids][]" type="checkbox" value="10">Stihl MS660/066 Air Filter 795711478179
</label>

<input name="service[part_ids][]" type="hidden" value="">
</div>

所以它们只是普通的旧复选框,最终与表单一起提交,并最终出现在 params 哈希中,如下所示:

Parameters: {"utf8"=>"✓", "authenticity_token"=>"IHXcV0H8NnySxGIBXi8ZA=", 
"service"=>{"tool_id"=>"121", "name"=>"refresher", "due_date"=>"2014-12-27",
"completed"=>"2014-12-27", "service_type_id"=>"2",
"part_ids"=>["14", "24", "10", ""], "note"=>""}, "parts_used"=>"",
"commit"=>"Create Service", "tool_id"=>"121"}

当使用相同的表单来编辑和退出服务时,它必须使用不同的表单而不是上面的部分表单。编辑表单如下所示:

<h1>Editing service for <%=" #{@tool.category.name.singularize} / #{@tool.serial}" %></h1>

<%= form_for ([@tool, @service]) do |f| %>
<% if @service.errors.any? %>
<div id="error_explanation">
<h2><%= pluralize(@service.errors.count, "error") %> prohibited this service from being saved:</h2>

<ul>
<% @service.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
</div>
<% end %>

<div class="row">

<div class="span4 offset1">

<div class="form-inline">
<%= f.hidden_field :tool_id , :value=>params[:tool_id] %>
<%= f.label :name %><br>
<%= f.text_field :name %>
</div>
<br>
<br>
<div class="form-inline">
<%= f.label :due_date %><br>
<%= f.text_field :due_date, 'data-behaviour' => 'datepicker' %>
</div>
<br>
<br>
<div class="form-inline">
<%= f.label :completed %><br>
<%= f.text_field :completed, 'data-behaviour' => 'datepicker' %>
</div>
<br>
<div class="field">
<%= f.label 'Service Type:' %>
<%= f.select :service_type_id, ServiceType.all.collect{|s| [s.name, s.id] }, {include_blank: false} %>
</div>
<br>

</div>

<div class="span7">
<div class="form-inline">
<div class="part_list_element">
Parts Used <br>
<%= text_field_tag :parts_used %>
</div>
</div>
<br>
<strong class="alert-danger">Any parts that get unchecked here will be returned to inventory</strong><br>
<b>Parts Used:</b> <br>
<div id="parts_used_list" class="checkbox inline">

<%= f.collection_check_boxes :part_ids, @service.parts, :id, :name %>


</div>
<br>
<b>Other Parts:</b> <br>
<div id="parts_expended" class="checkbox inline">

</div>
<br>
<br>

<div class="form-inline">
<%= f.label :note %><br>
<%= f.text_area :note %>
</div>
<br>
<br>
<div class="actions">
<%= f.submit %>
</div>

</div>
</div>

<% end %>

我希望这可以帮助任何做类似事情的人。您可以在 github 上查看完整的源应用程序: EquipDB on github.com

关于javascript - 以 Rails 4 形式将 <ul> 列表作为参数数组提交,使用 javascript 将 params 值添加到 params 哈希,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21896632/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com