jquery ui自动完成事件计时

jquery ui自动完成事件计时,jquery,jquery-ui,autocomplete,Jquery,Jquery Ui,Autocomplete,我需要为选择返回一个数字id,但以文字显示客户名称。我有一个用于客户id的隐藏字段和一个用于显示名称的文本输入。这算是可行的,但我更愿意改善用户体验 ajax请求返回变量数据中的客户列表,用于构建对象数组,如文档所示: values = []; $.each(data, function(index, guest) { values.push({label: guest, value: index}); }); 然后我将自动完成绑定到表单字段: $( "#customer" + num

我需要为选择返回一个数字id,但以文字显示客户名称。我有一个用于客户id的隐藏字段和一个用于显示名称的文本输入。这算是可行的,但我更愿意改善用户体验

ajax请求返回变量数据中的客户列表,用于构建对象数组,如文档所示:

values = [];
$.each(data, function(index, guest) {
    values.push({label: guest, value: index});
});
然后我将自动完成绑定到表单字段:

$( "#customer" + numRand ).autocomplete({
    source: values,
    minLength: 2,
    select: function (event, ui) {      // set hidden field with index of selection
        $( "#customerId" + numRand ).val(ui.item['value']);
    },
    change: function (event, ui) {      // restore word label to input field
        $( "#customer" + numRand ).val(ui.item['label']);
    }
});
numRand用于创建半唯一标识符,因为在这个应用程序中,表单加载在jQueryUI对话框中,否则实例之间会保留值

我尝试使用更改事件而不是关闭,但结果是一样的。*在表单字段中键入至少两个字母后,菜单将正确显示,并显示名称。选择名称后,数字索引进入表单字段。当焦点移动到页面的任何其他部分时(单击后台工作),数字索引将根据需要替换为客户名称。我希望最初也显示名称

关于如何在select上显示名称,有什么建议吗?(我试着把它放在那个处理程序中,但当焦点移动时,它会立即被留在那里的id覆盖)

提前感谢您的建议

*EDIT-我错了,close事件像select事件一样被内置方法覆盖

更新:解决方案很简单:使用select事件并通过返回false覆盖内置方法:

$( "#customer" + numRand ).autocomplete({
    source: values,
     minLength: 2,
     select: function (event, ui) {      
        $( "#customerId" + numRand ).val(ui.item['value']);
        $( "#customer" + numRand ).val(ui.item['label']);
        return false;
    }
});
$( "#customer" + numRand ).autocomplete({
   source: values,
   minLength: 2,
   select: function (event, ui) {      
      $( "#customerId" + numRand ).val(ui.item.value);
      $( "#customer" + numRand ).val(ui.item.label);
      return false;
  }
});

解决方案很简单:使用select事件并通过返回false覆盖内置方法:

$( "#customer" + numRand ).autocomplete({
    source: values,
     minLength: 2,
     select: function (event, ui) {      
        $( "#customerId" + numRand ).val(ui.item['value']);
        $( "#customer" + numRand ).val(ui.item['label']);
        return false;
    }
});
$( "#customer" + numRand ).autocomplete({
   source: values,
   minLength: 2,
   select: function (event, ui) {      
      $( "#customerId" + numRand ).val(ui.item.value);
      $( "#customer" + numRand ).val(ui.item.label);
      return false;
  }
});

解决方案很简单:使用select事件并通过返回false覆盖内置方法:

$( "#customer" + numRand ).autocomplete({
    source: values,
     minLength: 2,
     select: function (event, ui) {      
        $( "#customerId" + numRand ).val(ui.item['value']);
        $( "#customer" + numRand ).val(ui.item['label']);
        return false;
    }
});
$( "#customer" + numRand ).autocomplete({
   source: values,
   minLength: 2,
   select: function (event, ui) {      
      $( "#customerId" + numRand ).val(ui.item.value);
      $( "#customer" + numRand ).val(ui.item.label);
      return false;
  }
});

您可能希望提供一个代码工作的示例。感谢您的提示-可以在此处看到:这里更清晰:可以在此处看到解决方案:您应该回答自己的问题,如果您解决了问题,则接受答案,这样就不会再出现在“未回答”中。:)您可能希望提供一个代码工作的示例。感谢您的提示-可以在此处看到:这里更清晰:可以在此处看到解决方案:您应该回答自己的问题,如果您解决了问题,则接受答案,这样就不会再出现在“未回答”中。:)感谢PetersenDidIt和Kit Sunde对我的第一个问题的指导。感谢PetersenDidIt和Kit Sunde对我的第一个问题的指导。