JQuery UI Автозаполнение - манипулирование результатами - PullRequest
0 голосов
/ 20 сентября 2010

Я возвращаю несколько частей данных для каждого результата. В каждом результате у меня есть разные ссылки, которые я передаю, и которые я бы хотел сделать доступными для выбора. Прямо сейчас, независимо от того, где кто-то нажимает на результат, он просто помещает заголовок в текстовое поле вместо обработки ссылки.

$(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 и перейти туда.

EDIT:

Это код формата элемента, который я пробую. Это не похоже на то, что возвращается.

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

            })

        }
    })

});

Ответы [ 2 ]

0 голосов
/ 21 сентября 2010

Отключение обработчика событий щелчка не составило труда и решило проблему.

0 голосов
/ 20 сентября 2010

Вы должны посмотреть на http://docs.jquery.com/Plugins/Autocomplete/autocomplete#url_or_dataoptions в частности formatItem и formatResult вариантов.

Используйте параметр formatItem вместо ваш _renderItem взломать. имеющий несколько разных ссылок внутри автозаполнение строки немного больше сложно. Я предположил бы, что возможно вы просто делаете formatResult функция ничего не делать и зацепить пользовательские контактные ссылки и что не через .delegate() обработчик.

Эхх ....

Причина, по которой вам нужно обойти эту проблему, заключается в том, что автозаполнение не предназначено для наличия ссылок в отформатированных элементах списка. Если вы посмотрите на источник, то увидите, что для контейнера списка назначен обработчик события click, и он возвращает false при всех щелчках, которые происходят внутри списка. Имея это в виду, простой обработчик .delegate() не решит проблему. Сначала вам нужно будет отсоединять встроенный обработчик .click() каждый раз, когда он создается. Хотя это грязный хак, и если ты захочешь это сделать, я позволю кому-то другому объяснить это. Я бы порекомендовал вам просто найти другой плагин, который должен работать таким образом, или переосмыслить то, что вы делаете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...