如果 jquery ui 自动完成有图像,我该如何捕获 select 事件?

How do I capture the select event for a jquery ui autocomplete if it has images?

我有 this jsfiddle。我正在尝试创建一个带有图像的自动完成功能,当用户 select 是一张图像时,我想捕获该事件,但由于某种原因它不适用于图像:

$("#input").autocomplete({
          //source: tags,
          source: images,
          minLength: 1,
          delay: 0,
          open: function(){
            $('.ui-menu .ui-menu-item a').css('word-wrap','break-word');
          },
          close: function () { $('.ui-autocomplete').show() },
          focus: function(event, ui) {
            return false;
          },
          select: function(event, ui){
            alert("here there");
            return false;
          }
        }).data("uiAutocomplete")._renderItem = function(ul, item){
         //return $('<li style="margin-bottom:2px;"></li>').data("item.autocomplete", item).append('<a>hi there</a>').appendTo(ul);
         return $('<li style="margin-bottom:2px;"></li>').data("item.autocomplete", item).append('<a><img src="' + item + '" style="width:115px;"/></a>').appendTo(ul);
        }; 

如果我 return 只是纯文本(只是取消注释上面代码中的那部分)我可以捕获 select 事件但它不适用于图像?我也没有运气设置 z-index。

编辑:我更正了 jsfiddle link

我建议如下:

.data("uiAutocomplete")._renderItem = function(ul, item) {
  return $('<li style="margin-bottom:2px;"></li>').data("item.autocomplete", item).append('<div><img src="' + item.label + '" style="width:215px;"/></div>').appendTo(ul);
});

由于您使用的是 <a>,它的点击事件首先冒泡,这不允许点击以 <li> 为目标,因此不会触发 select

使用 DIV 的示例:https://jsfiddle.net/Twisty/napvj856/28/

您需要列表中的一些文本:

return $('<li style="margin-bottom:2px;">'+item.label+'</li>').data("item.autocomplete", item).append('<a><img src="' + item + '" style="width:115px;"/></a>').appendTo(ul);

然后,您可以通过设置隐藏文本:

li {
  font-size: 0;
}

并通过设置调整 .ui-state-active

a {
  display: block;
}