我在使用 jQuery remove() 函数从表单中删除某些字段时遇到了一些问题。在视图中我有一个表格。此表单有一组用于某些子元素的循环字段。用户可以删除每组。我在我的控制器中使用远程调用destroy方法,该方法调用带有jquery的js文件,该文件将淡出并删除相关字段集所在的div。
我的问题是,尽管对象被破坏并且 div 很好地淡出,但字段仍然处于活动状态,因此在发布表单时显然会出错。
我试图添加一个字段集标记并将其删除除了 div 之外,还尝试禁用整个字段集,但结果是一样的。这些字段仍在发布中(并且由于对象已被销毁,因此返回错误)。
这是视图的相关部分
- i = 0 # a bit crude, see if can make index count more Railsy
= f.simple_fields_for :fund_levels do |fl|
%div{id: "flheader-#{fl.object.id}"}
%div
= link_to "Sponsor levels", "#", :class => "show_hide", :id => "initiator1_fl#{i}", :style=>"margin-bottom:2px;", :onclick=>"return false"
%div{:class => "slidingDiv #{fund_levels_last?(i, @fund_level_count) ? "shown": "hidd" } whitebg leftadj", :id=>"body_fl#{i}", :style=>"width:100%;" }
= fl.input :title
= fl.input :description
= fl.input :maxnumber
= fl.input :price
%div{:style => "float: right; padding: 20px 20px 20px 0"}
= fund_levels_last?(i, @fund_level_count) ? ( link_to "add new level", ad, {class: 'button orange sm'} ) : ( link_to "remove", accounts_ad_fund_level_path(ad, fl.object.id), {:class => 'button orange sm', :method => :delete, :remote => true, :confirm => t('q.are_you_sure')} )
- i += 1
这是 jQuery 调用
$('#flheader-<%= @fundlevel.id %>').fadeOut(300, function() { $(this).remove(); });
正如我所说,对象被成功销毁并且 div 淡出。我只需要弄清楚在发布时如何从页面中完全删除已删除的对象(字段集)。
编辑:问题似乎是 simple_fields_for 在每个循环开始时立即生成一个隐藏的 ID 字段。这意味着 ID 字段实际上在被销毁的 div 之外,因此正在发布。关于如何强制隐藏 id 字段位于 DIV 内的任何想法?