jQuery Autocomplete de données Personnalisées et de les afficher en dehors de l'étiquette,valeur
Je suis en train d'essayer de tirer des données au format json et de les afficher à l'aide de jquery autocomplete.
Le tableau json contient ID, Titre, Date. Sur l'écran, j'en veux pour preuve le Titre et la Date et cliquez sur je veux analyser l'ID spécifique pour ce titre.
Donc actuellement, j'ai:
$("input").autocomplete({
source: function (d, e) {
$.ajax({
type: 'GET',
url: url + mode + encodeURIComponent(d.term) + key,
dataType: "jsonp",
success: function (b) {
var c = [];
$.each(b.results, function (i, a, k) {
c.push(a.title + " " + a.date) //Displays Title and Date
});
e(c)
}
})
},
select: function (a, b) {
console.log(b);
//Appends an array with 2 keys: Value and Label.
//Both display the title and date as shown above.
}
}).data( "autocomplete" )._renderItem = function( ul, item ) {
return $( "<li></li>" )
.data( "item.autocomplete", item )
.append( "<a>"+ item.label + "</a>" )
//Here I want to append a.id as class of this
//but the only values are value and label.
.appendTo( ul );
};
Alors, comment puis-je ajouter <li class="' + a.id + '">" + a.title + " " + a.date + "</li>"
- Pour personnaliser le format de l'étiquette, au lieu de réécrire la totalité de la requête, vous pouvez format après la saisie semi-automatique de la demande d'origine. Plus à ce sujet ici.
Vous devez vous connecter pour publier un commentaire.
Vous êtes à défaire les propriétés supplémentaires avec votre
$.each
boucle à l'intérieur de l'AJAX succès de la fonction (au passage, je suis sûr que$.each
's de rappel ne pas prendre une troisième paramètre). Ajoutez simplement unlabel
propriété à chaque élément de résultat et il devrait fonctionner correctement:Le widget fonctionne correctement avec supplémentaire propriétés, vous venez de doit ont au moins un
label
ouvalue
propriété.Maintenant dans votre
_renderItem
fonction, vous pouvez accéder à latitle
etdate
de la propriété de chaque élément:De l'essayer. Lieu de l'ID de la valeur de votre appel ajax.
Sur le $.ajax succès, vous devriez passer un objet contenant l'étiquette et les valeurs plutôt que seulement l'étiquette de la chaîne, vous pouvez attribuer l'une.id de l'élément.de la valeur. Comme ceci:
Vous pouvez également passer à l'objet d'origine en tant qu'étiquette (
c.push({'value':a.id, 'label':a})
), et de laisser la mise en forme de la_renderItem
(oùitem.label
serait le même quea
)