我有很多麻烦,使jQuery的自动填充小工具为我工作。我正在使用来自服务器的键/值对列表。jQuery UI自动完成与混合文本/ ID搜索
我有以下要求:
如果用户从窗口小部件选择一个值,我想ID传递给服务器。
如果用户没有选择一个值并输入原始文本,或者修改了一个已经被选中的值,我想要清除ID字段,并且只是将原始文本发送到服务器。
假设someAjaxFunction
返回自动填充小部件期望的对象数组:{label:label, value:key}
。
起初我设置自动完成构件像这样:
$(input).autocomplete({
source: sourceFunction,
minLength: 1
});
改变选择,甚至通过将鼠标悬停在项目中的一个改变了$(输入)参考下面的键文本框中的文本,而不是标签。从用户交互的角度来看,这是非常不可取的 - 事实上,我正在研究这个问题的原因是因为我正在构建的站点的用户一直对他们输入的文本感到困惑,似乎它们变成了随机数字!
我添加了一个隐藏字段下的文本框中并实施的select()和焦点()事件,以掩饰,像这样的ID:
$(input).autocomplete({
source: sourceFunction,
minLength: 1
focus: function(event, ui) {
$(idField).val(ui.item.value);
$(this).val(ui.item.label);
return false;
},
select: function(event, ui) {
$(idField).val(ui.item.value);
$(this).val(ui.item.label);
return false;
},
minLength: 1
});
这种运作良好,当用户被粘到由自动完成下拉菜单提供的脚本。该ID隐藏并正确提交给服务器。不幸的是,如果用户想要在框中输入一些自由格式的文本并根据该值进行搜索,则ID字段不会重置,并且之前选择的ID将被提交给服务器。这也相当混乱。
jQuery UI自动完成文档列出change
事件,并指出ui
参数的item
属性将设置为所选项目。我想我可以重置按键上隐藏的ID字段,并重新填充ID如果自动完成更改。不幸的是,除了按键事件捕获了一大堆按键,不应该重置ID,事件中的事件(这是管理文本框中的文本所必需的)中的语句阻止change
事件具有UI .item正确分配。
所以现在我被卡住了 - 我真的不知道还有什么我可以尝试使小部件支持功能,它似乎应该默认支持。要么这个过程比它本该更复杂,要么我错过了一些非常明显的东西。我挑选了所有可用的事件和所有的例子,并且空手而归。事实上,即使jQuery UI页面上的“自定义数据和显示”示例也会遇到这个问题。
我可以在服务器端添加一些黑客来掩盖这一点,但我真的希望能够在客户端级别做到这一点。
我还希望坚持jQuery UI自动填充小部件,而不是切换到另一个。
对不起,我可以澄清一些事情吗?至少有一个问题是,如果用户输入具有相应ID的值,或者如果用户没有对应的值时输入的任何内容,则希望ID框填充* *相关的ID - 正确/不正确的? – Stephen 2010-07-27 13:49:39
那么,如果文本框中的文本被设置为与自动完成提供的选项不对应的内容,我只希望隐藏的ID字段为空。 – Shabbyrobe 2010-07-27 14:27:37