jQuery自动完成触发器更改事件

Chr*_*ter 48 jquery-ui autocomplete

如何以编程方式触发jQuery UI的AutoComplete更改事件处理程序?

挂钩

$("#CompanyList").autocomplete({ 
    source: context.companies, 
    change: handleCompanyChanged 
});
Run Code Online (Sandbox Code Playgroud)

杂项尝试迄今为止

$("#CompanyList").change();
$("#CompanyList").trigger("change");
$("#CompanyList").triggerHandler("change");
Run Code Online (Sandbox Code Playgroud)

基于其他答案它应该工作:

如何在代码中触发jQuery更改事件

jQuery自动完成和更改问题

JQuery自动完成帮助

当我通过浏览器手动与AutoComplete输入交互时,change事件按预期触发; 但是我想在某些情况下以编程方式触发更改事件.

我错过了什么?

Joh*_*rer 41

干得好.它有点乱,但它有效.

$(function () {  
  var companyList = $("#CompanyList").autocomplete({ 
      change: function() {
          alert('changed');
      }
   });
   companyList.autocomplete('option','change').call(companyList);
});
Run Code Online (Sandbox Code Playgroud)

  • 工作胜过凌乱; 这绝对不是太糟糕.谢谢您的帮助.这是在某处记录的吗? (3认同)

lor*_*lad 21

这也会奏效

$("#CompanyList").autocomplete({
  source : yourSource,
  change : yourChangeHandler
})

// deprecated
//$("#CompanyList").data("autocomplete")._trigger("change")
// use this now
$("#CompanyList").data("ui-autocomplete")._trigger("change")
Run Code Online (Sandbox Code Playgroud)

  • @lordvlad当我尝试调用change事件时,错误connsole表示$().数据未定义. (2认同)

小智 18

最好使用select事件.Wil说,改变事件必然会被keydown所束缚.因此,如果你想听取选择的改变,请选择那样.

$("#yourcomponent").autocomplete({  
    select: function(event, ui) {
        console.log(ui);
    }
});
Run Code Online (Sandbox Code Playgroud)

  • 我认为问题是如何触发此选择:以编程方式触发的函数,而无需用户实际点击该选项. (4认同)

Wil*_*ver 13

它们绑定到自动完成源中的keydown,因此触发keydown会使其更新.

$("#CompanyList").trigger('keydown');
Run Code Online (Sandbox Code Playgroud)

它们不绑定到'change'事件,因为只有在表单字段失去焦点时才会在DOM级别触发.自动完成需要比"失去焦点"更快地响应,因此它必须绑定到键事件.

这样做:

companyList.autocomplete('option','change').call(companyList);
Run Code Online (Sandbox Code Playgroud)

如果用户重新输入之前的确切选项,将导致错误.


小智 10

对于其他人来说,这是一个相对干净的解决方案:

// run when eventlistener is triggered
$("#CompanyList").on( "autocompletechange", function(event,ui) {
   // post value to console for validation
   console.log($(this).val());
});
Run Code Online (Sandbox Code Playgroud)

Per api.jqueryui.com/autocomplete/,这将函数绑定到eventlistener.当用户从自动完成列表中选择一个值以及他们手动键入值时,它都会被触发.当场失去焦点时触发器触发.