3

可能重复:
jQuery AutoComplete 触发器更改事件

我正在使用 jQuery UI v1.9 并成功实现了jQuery UI 自动完成小部件。我想知道是否可以触发/绑定 jQuery UI 事件,如果可以,如何实现。也就是说,例如,如果我有

$('#autocomplete_field" %>').autocomplete({
  change: function (event, ui) {
    // Make something...
  },
  minLength: 2,
  ...
});

是否可以通过将 jQuery UIchange事件绑定到事件来运行它keypress


注意:我试过

$('#autocomplete_field').bind('keypress', function(event) {
    $('#autocomplete_field').autocomplete('option', 'change').call();
});

但我收到以下错误(来自 Firebug 控制台):

TypeError: elem.nodeName is undefined
...ks = jQuery.valHooks[ elem.type ] || jQuery.valHooks[ elem.nodeName.toLowerCase(...
4

3 回答 3

0

在快速查看jQuery UI 源代码后,我最初的猜测大部分是正确的(我已经有一段时间没有使用任何 jQuery UI 小部件了)。

autocomplete等等使用jQuery.Widget构建器,它为任何以小部件名称调用的事件添加前缀(或者widgetEventPrefix如果提供了一个)。

对于autocomplete,这意味着事件应该可以通过autocompletechange、等触发和绑定(您可以在小部件的文档页面autocompleteclose上找到其余事件)autocomplete

于 2012-11-20T15:18:59.567 回答
0

我认为如果您只是将功能从自动完成中抽象出来,那将很容易。

$('#autocomplete_field" %>').autocomplete({
    change: function (event, ui) {
        changeFunction()
    },
    minLength: 2,
          ...
});

$('#autocomplete_field').bind('keypress', function(event) {
    changeFunction();
});

function changeFunction() {
//make something
}
于 2012-11-20T15:19:34.630 回答
0

这将涵盖文本框的自动完成:

  $(".autoCompleteTxtBox").autocomplete({
                 source: "www.url.com/Source",
                 select: function (event, ui) {
                     //something to do when user selects from dropdown
                 }
             });



 $(document).on('keyup, keydown, change', '.selectorClass', function(event){    
       //I'm not sure what you need ui for exactly
      var pos = $(this).position(); // gets position of .selectorClass
      var val = $(this).val(); // gets current value of .selectorClass
      var width = $(this).width(); // gets width
     // if there are multiple '.selectorClass' - $(this) is the one that fired event
   });

这是否让您了解如何使用 $(this) ?

在同一文本框的 2 个位置处理事件有点多余,但如果这是你想要的 - 这将有一个正常工作的自动完成功能,并且每次文本框更改时都有另一个处理位置,无论它如何更改。

于 2012-11-20T15:42:48.160 回答