2011-10-03 40 views
28

我使用jQueryUI的自动完成,我必须映射到select事件的功能,如:如何在jQueryUI中手动触发自动完成“选择”事件?

$("#someId").autocomplete({ 
    source: someData, 
    select: function (event, ui) { ... }, 
    focus: function (event, ui) { ... } 
}); 

我有一个特殊情况:用户集中在自动完成下拉列表中的项目(但没有选择它),我需要从不同的功能手动触发选择事件。这可能吗?如果是这样,怎么样?

回答

33

下面是我工作:

$(this).data('ui-autocomplete')._trigger('select', 'autocompleteselect', {item:{value:$(this).val()}}); 
+0

不错,有没有更好的解决方案? – tinybyte

+2

非常好!这是实际触发事件的唯一解决方案,而不仅仅是模仿用户与UI的交互。 – yossi

+3

这比选定的答案要好,因为它传递了重要的“ui”数据 – SemanticZen

8

你可以这样做:

$("#someId").trigger("autocompleteselect"); 
+0

这并不在我的应用程序在铬工作140.0.835.200 – palmic

+7

这是因为,如果事件与'$(束缚,这只会工作)。在( 'autocompleteselect')'而不是在用'$()构造时绑定。自动完成({select:function(){}})'。使用'$()。data('autocomplete')._ trigger()'then – HenningCash

+0

你能解释一下如何在select中选择一个选项吗? – tinybyte

1

从外面:

$($('#someId').data('autocomplete').menu.active).find('a').trigger('click'); 

一个例子如何设置选择在从内侧按压水平箭头键触发“打开”自动完成的活动:

$('#someId').autocomplete({ 
    open: function(event, ui) { 
     $(this).keydown(function(e){ 
      /* horizontal keys */ 
      if (e.keyCode == 37 || e.keyCode == 39) { 
       $($(this).data('autocomplete').menu.active).find('a').trigger('click'); 
      } 
     }); 
    } 
}); 

不幸的是,如何解决这个标记为“成功”的好方法在我的应用程序中不起作用ñ铬140.0.835.200

6

你可以做到这一点jQuery开发团队确实在他们的单元测试的方式 - 看this答案

1

1线解决方案

$('.ui-menu-item .ui-corner-all:contains(\"123")').autocomplete({autoFocus:true}).mouseenter().click() 
+0

使用'.mouseenter() .click()'帮助我正确地从结果中选择一个项目 – Luksurious

3
$('#someId').data('uiAutocomplete')._trigger('select'); 
+0

真的被这个困住了,非常感谢,我用它触发了这个变化,就像这个$('#someId')。data('uiAutocomplete')。 _trigger( '变更'); – NinaNa

+0

这对我有用。 –

3

如果我们想要触发特定搜索:

$('#search-term').autocomplete('search', 'searching term'); 

或只是

$('#search-term').autocomplete('search'); 

$('#search-term').autocomplete({ 
    ... 
    minLength: 0, // with this setting 
    ... 
}); 
+0

从我的角度来看,更清晰和更好的答案 – Camille

0

我觉得很简单的方法,使其工作。 上面的答案不适合我。

我输入定义:

<div class="search_box"> 
<input type="text" class="inp disabled" id="search-user-id" placeholder="Search by user name or email" /> 
</div> 

自动完成定义:

$('#search-user-id').autocomplete({ 
    minChars: 3, 
    paramName: 'searchTerm', 
    deferRequestBy: 200, // This is to avoid js error on fast typing 
    serviceUrl: '${pageContext.request.contextPath}/settings/reset/psw/query', 
    type: 'POST', 
    onSelect : function(suggestion) { 
     showUserData(suggestion.dto); 
    }, 
    onSearchError: function (query, jqXHR, textStatus, errorThrown) { 
     $('.cev-error-fields.reset-password').find('.error_msg').text(errorThrown).show().fadeOut(7000); 
    } 
}); 

触发它: 我从其他页面中定义一个ajax触发, 我不把AJAX这里简单。 里面的Ajax响应我只是触发这样说:

 $('#search-user-id').val(username); 
     $('#search-user-id').focus(); 

它的工作。

2

直接让下面的函数

setAutocomplete("#txt_User_Name","rohit");

function setAutocomplete(autocompleteId,valuetoset) 
    { 
     $(autocompleteId).val(valuetoset); 
     $(autocompleteId).autocomplete("search", valuetoset); 
     var list = $(autocompleteId).autocomplete("widget"); 
     $(list[0].children[0]).click(); 
    } 
+0

我不得不添加一个超时,因为我的搜索没有及时完成(是ajax调用) –

相关问题