jquery中的自动完成+隐藏字段?

时间:2009-07-30 17:48:08

标签: jquery ajax autocomplete

我正在尝试做一个自动完成功能,它会显示一些东西,然后在选择的隐藏字段中添加其他内容。

示例:

在我的数据库中,我有{[1, 'john'], [2, 'bob'], [3, 'john']}

如果用户输入“jo”并点击第一个“john”,我就无法知道他点击了哪个条目。所以我需要某种相关的隐藏字段来处理这个问题。

是否有一个jquery插件可以执行此操作,还是必须创建自己的插件?

我已经开始了,它可以正常使用本地值,但是如果我必须异步获取它们,它还无法正常工作。我是以this plugin from bassistance为基础的。我想我可以抓住代码并改变他们处理响应的方式,但如果已经完成了某些事情,它会节省我一些时间!

4 个答案:

答案 0 :(得分:3)

您可以使用result handler并将所需的值存储在隐藏的输入中。

答案 1 :(得分:2)

我知道这已经过时了但是我这样做是为了让一个隐藏的字段填充一个永远不会显示的唯一ID,并向用户显示一个基于显示值的自动完成字段:

<script type="text/javascript">
var picklist = [
    { id: "1", value: "One" }, 
    { id: "2", value: "Two" }, 
    { id: "3", value: "Three" }, 
    { id: "4", value: "Four" }
    ];

$().ready(function() {
 $("#pickValue").autocomplete(picklist, {
  minChars: 0,
  max: 12,
  autoFill: true,
  mustMatch: true,
  matchContains: false,
  scrollHeight: 220,
  formatItem: function(row, i, total) {
   return row.value;
  }, 
  formatResult: function(row) {
   return row.value;
  }
 });
 $('input#pickValue').result(function(event, data, formatted) {
  $('#pickID').val( !data ? '' : data.id);
 });
});
</script>

答案 2 :(得分:1)

经过长时间的搜索,我发现只有自动完成的行为如下所示: Facelist

答案 3 :(得分:1)

这可能会有所帮助 诀窍是在select事件之后返回false。这将关闭选择下拉列表,您对隐藏/文本框的更改将保持可见。

 <script type="text/javascript">
      $(document).ready(function(){
        $("#user_autocomplete").autocomplete({
          source: "http://localhost:3000/admin/users/emails_autocomplete",
          minLength: 3,
          delay: 1,
          select: function( event, ui ) {
            if (ui.item) {
              console.log("Selected: " + ui.item.value + " aka " + ui.item.label);
              $("#user_autocomplete").val(ui.item.label);
              $('#search_user_id_equals').val(ui.item.value);
            } else {
              // "Nothing selected, input was " + this.value );
            }
            return false;
          }
        });
      });

   ...........

<input class="hidden" id="search_user_id_equals" name="search[user_id_equals]" type="hidden" />

<div class="input select optional">
  <label for="user_autocomplete">User email</label>
  <input id="user_autocomplete" type="text" index="" class="ui-autocomplete-input string"
         autocomplete="off" role="textbox"
         aria-autocomplete="list" aria-haspopup="true"
         value=""
         />
</div>