真正的简单问题 - 如何在text_field_with_auto_complete
块中使用form_for
?
我尝试过f.text_field_with_auto_complete
,但这会产生错误,只是单独使用text_field_with_auto_complete
似乎没有做任何事情。
我在这里错过了什么吗?
答案 0 :(得分:6)
我个人用这个:
<%= f.text_field :name, :autocomplete => "off" %><div class="auto_complete" id="customer_name_auto_complete"></div>
手动添加自动生成的Javascript和CSS。这是Javascript:
new Ajax.Autocompleter('customer_name', 'customer_name_auto_complete', '/customers/auto_complete_for_customer_name', {
method:'get',
paramName:'customer[name]',
minChars: 3
});
这是CSS:
div.auto_complete {
width: 350px;
background: #fff;
}
div.auto_complete ul {
border:1px solid #888;
margin:0;
padding:0;
width:100%;
list-style-type:none;
}
div.auto_complete ul li {
margin:0;
padding:3px;
}
div.auto_complete ul li.selected {
background-color: #ffb;
}
div.auto_complete ul strong.highlight {
color: #800;
margin:0;
padding:0;
}
答案 1 :(得分:3)
几个月前我写了一个插件,允许您直接在text_field_with_auto_complete
或fields_for
上调用“form_for
”方法。我们的想法是通过生成唯一的ID以支持javascript工作来支持在表单中出现多次的文本字段,但它也可能有助于解决您的问题,或者至少为您提供一些新的想法。
请参阅:http://github.com/pat11639/repeated_auto_complete
...以及本文详细了解其工作原理:http://patshaughnessy.net/2008/10/31/modifying-the-autocomplete-plugin-to-allow-repeated-fields
答案 2 :(得分:1)
如果你想设置一个id字段,你必须:
在LI项中呈现结果,每个li都将DOM ID设置为返回记录的id,如下所示:
<UL>
<LI ID="1">Item 1</LI>
< LI ID="2">Item 2< /LI>
</UL>
您的文字字段如下:
<%= text_field_with_auto_complete :model, :method, {}, :after_update_element => ‘getSelectionId’ % >
和一个名为getSelectionId的javascript方法,如下所示
function getSelectionId(text, li) {
alert (li.id);
}
请注意,您可以通过javascript执行任何操作,因为您可以使用文本和li元素。
另一个选项是this plugin
答案 3 :(得分:1)
即使在form_for块中,您也需要指定完整模型,因为它用于构造Ajax回调。同样在Ricardo列出的空哈希中,您可以将其他选项传递给自动填充字段,包括“:token”等。
答案 4 :(得分:0)
我也有这个问题,但我使用的解决方案可能不适用于你。
由于我在自动完成中查询的对象属于不同的模型,我使用了像这样的fields_for,这解决了自动完成问题。
<% fields_for :model, @formobject.model do %>
<p>
<%= text_field_with_auto_complete :object, :field, :skip_style => true %>
</p>
<% end %>
祝你好运!