【问题标题】:jquery ui autocomplete _renderItem seems to interfere with select eventjquery ui autocomplete _renderItem 似乎干扰了选择事件
【发布时间】:2012-06-09 15:40:53
【问题描述】:

如果我使用 _renderItem,我的选择事件将不起作用。如果我注释掉调用 _renderItem 的最后一个代码块,则选择事件起作用。当我使用 _renderItem 时,选择事件根本不会触发。

var cache = {}, lastXhr; 

$("#hifind-find").autocomplete({
  source: function(request, response) {

    var term = request.term; 
    if (term in cache) {
      response(cache[term]);
      return;
    }

    var posturl = '/hifind/jquery_ui/autocomplete/'+term; 
    lastXhr = $.post(posturl, function(data, status, xhr) {
      cache[term] = data; 
      if (xhr === lastXhr) {
        response(data); 
      } 
    }, 'json');
  },
  delay: 300,
  minLength: 1,
  select: function(event, ui){
    window.location = ui.item.dest;
  }
});

$.ui.autocomplete.prototype._renderItem = function(ul, item) {
  return $("<li></li>")
    .data("item.autocomplete", item)
    .append('<img src="' + iconImgPath + item.flag + '-search.png" class="icon-autocomplete-bundle">' + item.label )
    .appendTo( ul );
};

如果我执行类似...的操作,我会得到相同的结果

$("#hifind-find").autocomplete(myConfig).data("autocomplete")._renderItem = renderItemFunction;

无论哪种方式,选择都不会触发。 _renderItem 做了它应该做的事情。它修改了item,没有错误,但似乎破坏了选择。

【问题讨论】:

    标签: jquery jquery-ui select autocomplete jquery-ui-autocomplete


    【解决方案1】:

    相信这是因为您没有将项目包装在锚 (a) 标记中。更新您的代码以将 img 包装在一个锚中,它会正常工作:

    $.ui.autocomplete.prototype._renderItem = function(ul, item) {
      return $("<li></li>")
        .data("item.autocomplete", item)
        .append('<a><img src="' + iconImgPath + item.flag + '-search.png" class="icon-autocomplete-bundle">' + item.label + '</a>')
        .appendTo( ul );
    };
    

    以下是一些可能有帮助的示例:

    【讨论】:

    • 可悲的是,jQuery UI 的官方文档不仅完全忽略了这一点,而且他们实际上告诉你做错事。这是_renderItem 的示例代码:$( "&lt;li&gt;" ) .attr( "data-value", item.value ) .append( item.label ) .appendTo( ul );(注意缺少&lt;a&gt;)。感谢上帝的回答。
    • 此外,从 UI 1.12.* 开始,最好放置一个容器
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-31
    • 1970-01-01
    • 2017-07-01
    相关资源
    最近更新 更多