2010-09-20 5 views
-1

Je retourne plusieurs données pour chaque résultat. Dans chaque résultat j'ai différents liens que je passe que je voudrais sélectionner. En ce moment, peu importe où quelqu'un clique sur un résultat, il met simplement le titre dans la zone de texte plutôt que de traiter le lien.jquery ui autocomplete - manipuler les résultats

$(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); 
}; 

} 
}) 

}); 

Je voudrais qu'ils soient en mesure de cliquer item.url et il y va, ou item.contact et il y va.

EDIT:

Ceci est le code formatItem j'essayer. Il ne sert à rien d'avoir un effet sur ce qui est retourné.

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 

      }) 

     } 
    }) 

}); 

Répondre

0

La désactivation du gestionnaire d'événement de clic n'a pas été difficile et a résolu le problème.

0

Vous devriez regarder http://docs.jquery.com/Plugins/Autocomplete/autocomplete#url_or_dataoptions , en particulier les formatItem et formatResult options. Utilisez l'option formatItem au lieu de votre hack _renderItem. Ayant plusieurs liens différents à l'intérieur de la ligne auto-complète est un peu plus compliqué . Je suggère que peut-être vous faites juste la formatResult fonction ne rien faire et accrocher sur vos liens de contact personnalisés et ce pas via gestionnaire.

Ehh ....

La raison pour laquelle vous êtes d'avoir à travailler autour de c'est parce que autocomplete n'est pas conçu pour avoir des liens dans les éléments de liste formatés. Si vous regardez la source, vous verrez qu'il y a un gestionnaire d'événement click assigné au conteneur de liste, et il renvoie false sur tous les clics qui se produisent dans la zone de liste. Dans cet esprit, un simple gestionnaire .delegate() ne va pas résoudre le problème. Vous devrez d'abord dissocier le gestionnaire intégré .click() chaque fois qu'il est créé. C'est un bidouillage désordonné cependant, et si vous voulez le faire, je vais laisser quelqu'un d'autre l'expliquer. Je vous recommande de trouver un plugin différent qui fonctionne de cette façon ou de repenser ce que vous faites.

+0

La façon dont j'essaie cela ne semble pas avoir un effet sur la sortie. Maintenant, je ne vois que la valeur. J'ai ajouté le code que j'essaie à la question – specked

+0

Je ne pense pas que formatItem fonctionne pour ce nouveau plugin autocomplete. D'autres idées? J'utilise le plugin jQuery-ui – specked

Questions connexes