选择& onChange | Ruby on Rails

时间:2014-07-04 09:50:41

标签: ruby-on-rails forms select

在我看来,我有这个表格的选择功能:

<form id="form_id">
<%= form.select('id','name',  @document.informations.find(:all).collect {|u| [u.name] },
        options={},{:onChange => 'submit()'}) -%>
</form>

如何在视图的其余部分中使用所选名称?

我在其他主题中看到了这一点:

$('#id_name').val();

但它对我不起作用,它说:

`$(' is not allowed as a global variable name

1 个答案:

答案 0 :(得分:2)

您收到该特定错误,因为$('#id_name').val()是JavaScript,而不是Ruby,但您已将其置于erb标记内。

当您在浏览器中访问页面/documents/3时,Rails将在您的控制器中运行代码,并将一些HTML发送回您的浏览器。 HTML可以加载CSS和JavaScript,但是在Ruby程序完成后运行 - 并且可能根本不运行,具体取决于浏览器。如何在视图中使用所选项目的名称取决于您使用它所做的事情。

如果你将它存储在某个地方的数据库中,那么你应该首先让它在Ruby中运行。例如,如果您的@document具有selected_informations属性,则可以在页面的其余部分使用该属性,并将其传递给form.select以在页面中预先选择它。 The Rails Guides documentation has more info on this

如果您没有将其存储在数据库中,那么无论何时更改,您都可以使用JavaScript获取该框的值。这里有一些示例代码,只要<select>框发生更改,就会将所选项的名称打印到JavaScript控制台。我已将其包含在<script>标记中,因此您可以将其直接放入视图中进行测试,但如果您根据项目进行调整,则应将其放入专用的JavaScript文件中。

<script>
$('select').on('change', function(ev) { 
    var selected_item = $(ev.currentTarget).val();
    console.log("Your select value is " + selected_item);
});
</script>

最后要注意的是,您的现有form.select代码设置为在其值发生更改时调用方法submit()submit只是一个名称,因此函数可以做任何事情......但我猜他们每当选择一个项目时都会提交表单。这会向您的Rails服务器发送请求并刷新页面,因此请注意 - 如果您使用change上的事件监听器来更新当前页面,则您将无法在新页面上看到这些更改,刷新页面(并应使用服务器端解决方案)。