【问题标题】:jquery ui autocomplete - manipulating resultsjquery ui自动完成 - 操作结果
【发布时间】:2010-09-21 21:07:40
【问题描述】:

我为每个结果返回多条数据。在每个结果中,我都有不同的链接,我希望将它们设为可选。现在无论有人在哪里点击结果,它只是将标题放入文本框中,而不是处理链接。

$(function() {
function log(message) {
$("<div/>").text(message).prependTo("#log");
$("#log").attr("scrollTop", 0);

}

$.ajax({
url: "links2.xml",
dataType: "xml",
success: function(xmlResponse) {
 var data = $("ROW", xmlResponse).map(function() {
  return {
    value: $("SC_DF_FIELD_1", this).text(),
    url: $("SC_DF_FIELD_2", this).text(),
    support_url: $("SC_DF_FIELD_3", this).text(),
    description: $("SC_DF_FIELD_4", this).text(),
    contact: $("SC_DF_PERSON_LINK", this).text()

  };
 }).get();

 $("#birds").autocomplete({
  source: data,
  minLength: 0

 }).data( "autocomplete" )._renderItem = function( ul, item ) {
 return $( "<li></li>" )
 .data( "item.autocomplete", item )
 .append( "<a>" + item.value + "<br>" + item.url + "<br>" + item.description + "<br>"  + "Support URL: " + item.support_url + "<br>" + "Contact: " + "<a  href=http://someurl.whatever?p_id=" + item.contact + ">Test</a>" + "</a>" )
 .appendTo( ul );
 };

 }
 })

});

所以我希望他们能够点击 item.url 并进入那里,或者 item.contact 进入那里。

编辑:

这是我正在尝试的 formatItem 代码。它不会对返回的内容产生任何影响。

function formatItem(item, foo, bar, term){
    var temp =  item.title + '<br />&nbsp;&nbsp;' + item.description + '<br />' + '<a href=' + item.url + '>test</a>';
    return temp;

}


    $.ajax({
        url: "links2.xml",
        dataType: "xml",
        success: function(xmlResponse) {
            var data = $("ROW", xmlResponse).map(function() {
                return {
                     value: $("SC_DF_FIELD_1", this).text(),
                     url: $("SC_DF_FIELD_2", this).text(),
                     support_url: $("SC_DF_FIELD_3", this).text(),
                     description: $("SC_DF_FIELD_4", this).text(),
                     contact: $("SC_DF_PERSON_LINK", this).text()

                };
            }).get();

            $("#birds").autocomplete({
                source: data,
                minLength: 0,
                formatItem: formatItem

            })

        }
    })

});

【问题讨论】:

    标签: javascript jquery autocomplete


    【解决方案1】:

    禁用单击事件处理程序并不困难,并且解决了问题。

    【讨论】:

      【解决方案2】:

      你应该看看 http://docs.jquery.com/Plugins/Autocomplete/autocomplete#url_or_dataoptions ,特别是formatItemformatResult 选项。

      使用formatItem 选项代替 你的 _renderItem 黑客。有 内部有多个不同的链接 自动完成行有点多 复杂。我建议也许 你只需制作formatResult 函数什么都不做,并挂在你的 自定义联系链接以及不通过什么 .delegate() 处理程序。

      呃……

      您必须解决此问题的原因是,自动完成功能并非旨在在格式化列表项中包含链接。如果查看源代码,您会看到分配给列表容器的 click 事件处理程序,并且对于列表框内发生的所有单击,它都会返回 false。考虑到这一点,一个简单的.delegate() 处理程序不会解决问题。每次创建内置 .click() 处理程序时,您都必须首先取消绑定它。不过,这是一个混乱的 hack,如果您想这样做,我会让其他人解释它。我建议你找到一个可以以这种方式工作的不同插件,或者重新考虑你在做什么。

      【讨论】:

      • 我尝试的方式不会对输出产生影响。现在我只看到价值。我在问题中添加了我正在尝试的代码
      • 我认为 formatItem 不适用于这个较新的自动完成插件。还有其他想法吗?我正在使用 jQuery-ui 插件
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-01-28
      • 2015-08-09
      • 2011-10-12
      • 1970-01-01
      • 1970-01-01
      • 2011-11-28
      • 2013-12-01
      相关资源
      最近更新 更多