2009-09-16 5 views
0

J'utilise le plugin jQuery autocomplete (api doc) qui appelle un service qui renvoie json. J'ai le plugin consommer le résultat json bien et tout fonctionne, execpt ma fonction formatResult personnalisée n'est jamais appelée. Je voudrais utiliser cette fonction pour capturer l'utilisateur sélectionnant dans la liste de résultats pour remplir divers autres champs sur la page.Pourquoi ma fonction formatResult personnalisée n'est-elle pas appelée à l'aide du plugin jQuery autoComplete?

$(document).ready(function() { 
    $("#vendorname").autocomplete("/Vendor/Search", { 
     dataType: 'json', 
     parse: function(data) { 
      var rows = new Array(); 
      for (var i = 0; i < data.length; i++) { 
       rows[i] = { data: data[i], value: data[i].Name, result: data[i].Name }; 
      } 
      return rows; 
     }, 
     formatItem: function(row, i, n) { 
      return row.RepName + ' (' + row.VendorId + ')'; 
     }, 
     formatResult: function(row, i, n) { 
      return '(formatResult) ' + row.Name; 
     }, 
     width: 200, 
     mustMatch: false, 
     scroll: true, 
     scrollHeight: 300 
    }); 
}); 

La chaîne JSON retournée du service est (deux objets) fournisseur

[{"VendorId":1,"Name":"abc","RepName":"rep of abc","Phone":null,"Email":null,"Notes":null,"Version":null,"Fax":null,"ProductQuotes":[],"PurchaseOrders":[]},{"VendorId":2,"Name":"def","RepName":"rep of def","Phone":null,"Email":null,"Notes":null,"Version":null,"Fax":null,"ProductQuotes":[],"PurchaseOrders":[]}] 

Ainsi,

1) Pourquoi formatResult est frappé jamais? 2) Existe-t-il un meilleur moyen de récupérer les propriétés de l'objet une fois qu'un utilisateur a sélectionné un élément dans les résultats?

Répondre

2

Le résultat du format modifie simplement ce qui apparaît dans la zone de texte. Si vous voulez intercepter des modifications à la valeur de l'entrée puis faire

$("#vendorname").result(function(event, data, formatted){ 
    //do something 
    }); 
0

Comme une note ici, notez que formatResult et formatItem ne semblent pas travailler/existe plus dans la saisie semi-automatique de base de jQuery. Au lieu de cela, j'ai utilisé une combinaison de this reply et un peu de mon propre code. Voici le code gagnant pour moi. Cette fonction particulière prend soin des valeurs et des étiquettes, mais vous pouvez mettre n'importe quelle fonction de votre choix .:

$(document).ready(function(){ 
    $('#TradeFromUserId').autocomplete({ 
     minLength: 3, 
     source: '/my.json', 
     select: function(event, ui { 
      var selectedObj = ui.item; 
      $('input#TradeFromUserId').val(selectedObj.label); 
      $('input#TradeFromUserIdHidden').val(selectedObj.value); 
      return false; 
     focus: function(event, ui){ 
      var selectedObj = ui.item; 
      $('input#TradeFromUserId').val(selectedObj.label); 
      $('input#TradeFromUserIdHidden').val(selectedObj.value); 
      return false; 
     } 
    }); 
}); 
Questions connexes