在我看来,我有这个表格的选择功能:
<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
答案 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
上的事件监听器来更新当前页面,则您将无法在新页面上看到这些更改,刷新页面(并应使用服务器端解决方案)。