jquery-ui - jQuery UI 自动完成 onSelect 重写

标签 jquery-ui jquery jquery-ui-autocomplete

我有一个文本框,我将自动完成功能附加到其中。当您开始输入时...它会在数据库中查找并返回/缩小适当的内容。当用户从返回的列表中进行选择时...将返回图像和一些其他信息并将其放置在页面中。效果很好。见下文:

jQuery(function ($) {
var a = $('#artistName').autocomplete({ 
    serviceUrl: '/link/to/processor.ashx?action=artist',
    minChars:1, 
    maxHeight:400,
    width:300,
    zIndex: 9999,
    deferRequestBy: 0, 

    // callback function:
    onSelect: function(value, data){ 
        if (data) {
            var artistData = data.split('|');
            var src = '<%= ImageServer %>' + '/path/to/image/' + value + '.jpg';
            $("#artistPhoto").attr('src', src);
            $('#artistExt').remove();

            if (artistData[1] !== undefined && artistData[1] != 0) {
                $("#artistSection").append('<div id="artistExt"><span>Contact me @</span> 1-888-123-4567 Ext: ' + artistData[1] + '</div>');
            }
        }
    }
});    
});

我想做的是,如果用户未从列表中进行选择,则提供相同的功能(例如...用户可以开始输入“Bill”之类的名称,自动完成将返回“Bill”.. .但是如果用户没有从返回的结果列表中选择“Bill”而只是键入名称...显然什么都不会发生,因为该事件位于 onSelect 函数上。

有人可以帮我弄清楚如何以一种只要有匹配就触发 onSelect、onChange、onLoad、onKeyUp、on[enter] 等事件的方式编写此代码吗?只寻找值/长度是否更好?还有一种情况可能会发生,即用户输入页面并且文本框已预先填充。在这种情况下,我想要与 onSelect 函数相同的显示更改。

任何帮助将不胜感激。谢谢。

最佳答案

这有点像黑客,但它确实有效。

在设置自动完成之前,添加一个变量:

var firstitem = null;

使用此代码将 open 选项添加到自动完成功能中。

open : function (event, ui) {
  firstitem = j$(j$("#SelectProject").data("autocomplete").menu.element.children().first()[0].innerHTML).html();
}

定义自动完成功能后,将模糊事件绑定(bind)到自动完成输入。

.bind("blur", function () { j$(this).val(firstitem); } );

最终结果应如下所示:

jQuery(function ($) {

  var firstitem = null;
  var a = $('#artistName').autocomplete({
      serviceUrl : '/link/to/processor.ashx?action=artist',
      minChars : 1,
      maxHeight : 400,
      width : 300,
      zIndex : 9999,
      deferRequestBy : 0,

      // callback function:
      onSelect : function (value, data) {
        if (data) {
          var artistData = data.split('|');
          var src = '<%= ImageServer %>' + '/path/to/image/' + value + '.jpg';
          $("#artistPhoto").attr('src', src);
          $('#artistExt').remove();

          if (artistData[1] !== undefined && artistData[1] != 0) {
            $("#artistSection").append('<div id="artistExt"><span>Contact me @</span> 1-888-123-4567 Ext: ' + artistData[1] + '</div>');
          }
        }
      },

      open : function (event, ui) {
        firstitem = j$(j$("#SelectProject").data("autocomplete").menu.element.children().first()[0].innerHTML).html();
      }
    }).bind("blur", function () { j$(this).val(firstitem); } );

});

此外,请参阅 selectFirst 插件、 autoFocus optionopen event documentation 了解更多信息。

关于jquery-ui - jQuery UI 自动完成 onSelect 重写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12916534/

相关文章:

javascript - 如何在 Asp.Net 中加载脚本

jQuery UI 自动完成 : add a css class to specific items

ajax - Mvc 自动完成 ajax

React 中的 jQuery UI Datepicker 抛出 Uncaught TypeError

javascript - 在自定义 'alert' 或 'confirm' 框中,剩余代码在按“确定”之前执行

jquery - 无法将文本颜色黑色转换为白色(从一种颜色淡入另一种颜色)-JQuery UI

jquery 不区分大小写通过数据查找方法

javascript - 获取div的父级的父级

jquery-ui - 中间单词的自动完成(jQuery UI)

jquery - 是否可以设置 jQuery 自动完成组合框的宽度?