【发布时间】:2012-12-09 23:36:41
【问题描述】:
我在 Ruby on Rails 上运行 javascript,以便在用户单击链接时将表单动态插入页面。
它不起作用,但一个特殊的错误让我的山羊:我的表单在调试控制台中返回 form.children UNDEFINED。
这是表单(在 Rails 中):
<div class="field">
<%= f.label :name, 'Tag:' %>
<%= f.text_field :name %>
</div>
这是 application.js 中的 javascript;
function add_fields(link, association, form) {
console.log(form);
console.log(form.children);
link.insertBefore(form, link.previousSibling.previousSibling);
}
我已经测试了该应用程序是否通过输出文本等实际调用了javascript并且它可以工作。问题显然出在我的表单上。
最后是控制台输出:
<div class="field">
<label for="post_tags_attributes_4_name">Tag:</label>
<input id="post_tags_attributes_4_name" name="post[tags_attributes][4][name]" size="30" type="text" />
</div> application.js:21
undefined application.js:22
Uncaught Error: NOT_FOUND_ERR: DOM Exception 8
顺便说一句,我正在尝试在动态插入的嵌套表单上实现 railscast #197,这是一场灾难!
---编辑---
这是我如何调用构建字段元素的 add_fields 函数:
红宝石函数:
module TagsHelper
def link_to_add_fields(name, post_form, association)
new_object = post_form.object.class.reflect_on_association(association).klass.new
tag_field = post_form.fields_for :tags, new_object do|tag_form|
render("tag_field", :f=>tag_form)
end
#debugger
link_to_function(name, "add_fields(this, \"#{association}\", \"#{escape_javascript(tag_field)}\")")
end
end
这里是 tag_field html:
<div class="field">
<%= f.label :name, 'Tag:' %>
<%= f.text_field :name %>
</div>
【问题讨论】:
-
听起来
form不是 DOM 元素。您能否向我们展示您如何调用add_fields函数(使用哪些值)? -
你的意思是
childNodes而不是children? -
可能你的测试浏览器不支持
Element.children -
" 我的表单(这是一个 div)" 嗯?它是哪一个?表单还是 div?
-
@Bergi:刚刚更新了我的回复,提供了有关 add_field 调用的值的更多详细信息。
标签: javascript ruby ruby-on-rails-3 forms railscasts