对嵌套表单中的新字段重新应用 jquery - Rails 3
Re applying jquery for new fields in nested forms - Rails 3
我是jquery的新手,我在rails上使用嵌套表单。表单是如此之大,以至于我正在尝试将手风琴插件应用于表单.以下是发生的情况:
手风琴插件在加载表单时运行良好,但是,当我添加新字段时,手风琴将无法与新字段一起使用。我相信我必须进行"刷新",或者在javascript上添加一些东西来jquery找到新字段。
这是代码:
视图:
<div id="wrapper"> <!-- wrapper for accordion -->
<%= f.simple_fields_for :chapters do |builder| %>
<%= render "chapters_fields", f: builder %>
<% end %>
<p>
<%= link_to_add_fields "Add chapters", f, :chapters, "chapters" %>
</p>
<br/>
</div>
部分_chapters_fields:
<div class="chapter-fields">
<div class="accordionButton">
<h3>Chapter</h3>
</div>
<div class="accordionContent">
<p>
<%= f.input :reference, input_html: {title: "Links chapters to each other. The first chapter must have reference '1'"} %>
<%= f.input :content, as: :text, input_html: { rows: 10, style: 'width: 100%' } %>
<%= f.input :image, input_html: {onchange: "validateFiles(this);"}, data: {max_file_size: 300.kilobytes} %>
<% if f.object.image.blank? %>
No current image
<% else %>
Current image: <%= f.object.image.url.split("/").last %>
<% end %>
</p>
</div>
</div>
<br/>
应用.js
$('.accordionButton').click(function() {
//REMOVE THE ON CLASS FROM ALL BUTTONS
$('.accordionButton').removeClass('on');
//NO MATTER WHAT WE CLOSE ALL OPEN SLIDES
$('.accordionContent').slideUp('normal');
//IF THE NEXT SLIDE WASN'T OPEN THEN OPEN IT
if($(this).next().is(':hidden') == true) {
//ADD THE ON CLASS TO THE BUTTON
$(this).addClass('on');
//OPEN THE SLIDE
$(this).next().slideDown('normal');
}
});
/*** REMOVE IF MOUSEOVER IS NOT REQUIRED ***/
//ADDS THE .OVER CLASS FROM THE STYLESHEET ON MOUSEOVER
$('.accordionButton').mouseover(function() {
$(this).addClass('over');
//ON MOUSEOUT REMOVE THE OVER CLASS
}).mouseout(function() {
$(this).removeClass('over');
});
/*** END REMOVE IF MOUSEOVER IS NOT REQUIRED ***/
$('.accordionContent').hide();
function add_fields(link, association, content) {
var new_id = new Date().getTime();
var regexp = new RegExp("new_" + association, "g");
$(link).parent().before(content.replace(regexp, new_id));
}
function remove_fields(link, form) {
$(link).prev("input[type=hidden]").val("1");
$(link).closest("."+form+"-fields").hide();
}
您正在设置的jQuery侦听器仅在初始文档加载时侦听DOM的元素(我猜您已经将其包含在$(document).ready(//your code)
中)。
要让他们侦听特定容器(或整个文档中)中的新项目,您需要在上一级(或整个文档,如下所示)侦听,如下所示:
$(document).on('click', '.accordionButton', function() {
//REMOVE THE ON CLASS FROM ALL BUTTONS
$('.accordionButton').removeClass('on');
//NO MATTER WHAT WE CLOSE ALL OPEN SLIDES
$('.accordionContent').slideUp('normal');
//IF THE NEXT SLIDE WASN'T OPEN THEN OPEN IT
if($(this).next().is(':hidden') == true) {
//ADD THE ON CLASS TO THE BUTTON
$(this).addClass('on');
//OPEN THE SLIDE
$(this).next().slideDown('normal');
}
});
/*** REMOVE IF MOUSEOVER IS NOT REQUIRED ***/
//ADDS THE .OVER CLASS FROM THE STYLESHEET ON MOUSEOVER
$(document).on('mouseover', '.accordionButton', function() {
$(this).addClass('over');
//ON MOUSEOUT REMOVE THE OVER CLASS
});
$(document).on('mouseout', '.accordionButton', function() {
$(this).removeClass('over');
});
/*** END REMOVE IF MOUSEOVER IS NOT REQUIRED ***/
$('.accordionContent').hide();
function add_fields(link, association, content) {
var new_id = new Date().getTime();
var regexp = new RegExp("new_" + association, "g");
$(link).parent().before(content.replace(regexp, new_id));
}
function remove_fields(link, form) {
$(link).prev("input[type=hidden]").val("1");
$(link).closest("."+form+"-fields").hide();
}
这应该可以解决问题。
相关文章:
- 在web应用程序中的新搜索中重新加载搜索结果(不带jQuery)
- Chrome应用程序在全屏中创建新窗口-html元素不是全高的
- 如何在ChromeOS上从Chrome应用程序配对新的蓝牙设备
- 在应用新转换之前停止所有转换
- 谷歌应用脚本打开新窗口
- 如何在数组中以ng个重复间隔应用新添加的对象
- 如何在设置后将 Express.js 用于新的 Web 应用
- 扩展成员应用程序,包括新的路线,现在没有任何渲染
- jQuery倒计时-应用于通过AJAX/PHP加载的新元素
- 将新按钮应用于游戏
- 获取模板是用我的Node.JS应用程序的新版本Handlebars错误预编译的
- 将jQuery事件函数应用于新的Knockout.js数组元素
- 使用应用程序脚本在内存中创建新blob
- 在knocket js中应用绑定后,向视图模型添加新属性
- 如何在不打开新窗口的情况下在单页应用中执行 Dropbox 身份验证
- $q服务 - 我应该在新的 AngularJS 应用程序中使用 CommonJS 风格还是构造函数风格
- 蝙蝠侠.js新的应用程序问题
- 如何规划新 JS 应用程序的结构
- 流星新的应用程序结构减慢了ui文件夹的开发速度
- 我在我的新Reactjs应用程序上得到一个404错误,它是在寻找一个main.js文件