0

我正在尝试遵循嵌套模型表单的 railscast,但在编写Java Script. 我已经工作Rails了几个星期,但这是我第一次遇到JavaScript,如果这听起来有点无趣,请原谅我。

我正在尝试按照演员表的建议从表单中删除元素,但它给了我以下错误。(我正在使用 Chrome 的调试工具查看错误)

Uncaught TypeError: Object [object Object] has no method 'previous' application.js?body=1:10222
remove_class_row application.js?body=1:10222
onclick read:95

这是我的观点,/app_root/app/views/classifications/read.html.erb:

<table id="classification_read_table">
    <tr ><td id="classification_read_table_td">
        <b>Classification</b>
    </td></tr>
    <%= form_tag read_build_path  %>
        <% @classes.each do |f| %>
            <div class="class_row">
                <tr >
                    <td class="classification_read_table_td">
                        <%= fields_for "class_is[]", f do |g| %>
                        <%= g.label :name %>
                        <%= g.text_field :name %>
                        <%= g.hidden_field :_destroy%>
                        <%= link_to_function "remove", "remove_class_row(this)" %>
                    </td>
                </tr>
            </div>
        <% end %>
    <% end %>
</table>

这是我的 JS 文件 app_root/app/assets/javascript/application.js:

function remove_class_row(link) {
    $(link).previous("input[type=hidden]").value = "1"; //Error on this line: 
    $(link).up(".class_row").hide();
}

我正在做 javascript,就像 rails cast 显示的那样,所以我不明白可能出了什么问题。我的第一个想法是,我正在尝试做的事情被弃用了吗?或者由于某种原因,我的 HTML 没有以正确的方式设置。

希望有人能指出我遗漏的平凡细节。

谢谢!!

4

1 回答 1

1

我想你可能正在寻找.prev(). 此外,您应该使用.val()jQuery 设置字段值。

$(link).prev("input[type=hidden]").val("1");
于 2013-10-19T19:17:48.467 回答