选择 jQuery UI 自动完成后清除表单字段

Posted

技术标签:

【中文标题】选择 jQuery UI 自动完成后清除表单字段【英文标题】:Clear form field after select for jQuery UI Autocomplete 【发布时间】:2011-02-03 10:48:33 【问题描述】:

我正在开发一个表单,并使用 jQuery UI 自动完成功能。当用户选择一个选项时,我希望选择弹出到附加到父 <p> 标记的跨度中。然后我希望该字段清除而不是填充选择。

我的跨度看起来很好,但我无法清除该字段。

如何取消 jQuery UI Autocomplete 的默认选择动作?

这是我的代码:

var availableTags = ["cheese", "milk", "dairy", "meat", "vegetables", "fruit", "grains"];
$("[id^=item-tag-]").autocomplete(
    source: availableTags,

    select: function()
        var newTag = $(this).val();
        $(this).val("");
        $(this).parent().append("<span>" + newTag + "<a href=\"#\">[x]</a> </span>");
    
);

仅仅做$(this).val(""); 是行不通的。令人抓狂的是,如果我忽略自动完成功能,几乎所有功能都可以正常工作,并且在用户输入逗号时采取行动:

$('[id^=item-tag-]').keyup(function(e) 
    if(e.keyCode == 188) 
        var newTag = $(this).val().slice(0,-1);
        $(this).val('');
        $(this).parent().append("<span>" + newTag + "<a href=\"#\">[x]</a> </span>");
    
);

真正的最终结果是自动完成以处理多项选择。如果有人对此有任何建议,欢迎提出。

【问题讨论】:

【参考方案1】:

添加$(this).val(''); return false; 到您的 select 函数结束以清除字段并取消事件:)

这将阻止值被更新。你可以看看它是如何工作的around line 109 here。

其中的代码专门检查是否为 false:

if ( false !== self._trigger( "select", event,  item: item  ) ) 
  self.element.val( item.value );

【讨论】:

让我补充一点,一旦你返回 false,你就不再需要自己设置值(即不需要$(this).val(''); 如果希望输入字段完全清除任何值,我相信仍然必须调用.val('')return false; 只会阻止所选项目的文本出现在输入字段中。 Uri 不正确,Ryan 正确。你需要返回 false 以防止它随着你的选择而更新,如果你想清除它,你还需要 $(this).val('') 。 return false 为我做了。我让它工作,如果满足某个条件,它会做一些事情并清空值,如果是假的,它会做不同的事情并清空值。只有“真”条件才真正消除了该值。终于发现我可以返回 false 以防止它在搜索字段中更新,这真是令人抓狂。谢谢! 他们应该记录下 select 函数没有覆盖他们的 select 函数。【参考方案2】:

你也可以使用 event.preventDefault() 来代替 return false。

select: function(event, ui)
    var newTag = $(this).val();
    $(this).val("");
    $(this).parent().append("<span>" + newTag + "<a href=\"#\">[x]</a> </span>");
    event.preventDefault();

【讨论】:

【参考方案3】:

在选择回调中需要返回 false 来清空该字段。 但是如果你想再次控制字段,即设置值,你必须调用一个新函数来打破 ui。

也许你有一个提示值,例如:

var promptText = "Enter a grocery item here."

将其设置为元素的 val。 (在焦点上我们设置为'')。

$("selector").val(promptText).focus(function()  $(this).val(''); ).autocomplete(
    source: availableTags,
    select: function()
        $(this).parent().append("<span>" + ui.item.value + "<a href=\"#\">[x]</a> </span>");
     foo.resetter(); // break out //
    return false;  //gives an empty input field // 
    
);

foo.resetter = function() 
  $("selector").val(promptText);  //returns to original val

【讨论】:

【参考方案4】:

对我来说效果很好。

选择事件后,我使用了事件更改。

 change:function(event)
   $("#selector").val("");  
   return false;
 

我是初学者!

【讨论】:

【参考方案5】:

试试这个

select: function (event, ui) 
    $(this).val('');
    return false;       

【讨论】:

【参考方案6】:

我刚刚解决了它强迫失去焦点:

$('#select_id').blur();
printResult();

【讨论】:

以上是关于选择 jQuery UI 自动完成后清除表单字段的主要内容,如果未能解决你的问题,请参考以下文章

使用箭头键浏览结果时在 jQuery UI 自动完成上触发“选择”事件

在 JQuery 自动完成填充输入字段后调用新函数

jquery UI 自动完成:我克隆的自动完成字段不起作用

如何使 jQuery 自动完成列表显示所有选项 onfocus 并在选择选项后隐藏?

jQuery自动完成,通过选择建议选项填充多个字段

jQuery 自动完成:事件选择