2010-11-15 4 views
0

Je souhaite que mon champ de saisie comporte jquery autocomplete où je récupère les noms de sociétés de la base de données et les affiche à l'utilisateur. Voici un extrait que j'ai trouvé sur jquery.com. Je veux le réécrire pour répondre à mes besoins et j'ai besoin d'aide.jquery autocomplete avec objet json distant

dans l'attribut source
$(function() { 
    function log(message) { 
    $("<div/>").text(message).prependTo("#log"); 
    $("#log").attr("scrollTop", 0); 
    } 

    $("#company_name").autocomplete({ 
    source: function(request, response) { 
    $.ajax({ 
    url: "inc/company_name.php", 
    dataType: "jsonp", 
    data: { 
     featureClass: "P", 
     style: "full", 
     maxRows: 12, 
     name_startsWith: request.term 
    }, 
    success: function(data) { 
     response($.map(data.geonames, function(item) { 
     return { 
     label: item.name, 
     value: item.name 
     } 
     })); 
    } 
    }); 
    }, 
    minLength: 2, 
    select: function(event, ui) { 
    log(ui.item ? 
    "Selected: " + ui.item.label : 
    "Nothing selected, input was " + this.value); 
    }, 
    open: function() { 
    $(this).removeClass("ui-corner-all").addClass("ui-corner-top"); 
    }, 
    close: function() { 
    $(this).removeClass("ui-corner-top").addClass("ui-corner-all"); 
    } 
    }); 
}); 

, sur sucess, je veux remplacer

response($.map(data.geonames, 
    function(item) { ... } 

avec le code approprié pour afficher mes données d'objet JSON. Voici mon objet json créé en PHP.

<?php 
$arr = array ('item' => 'company name'); 
echo json_encode($arr); 
?> 

Répondre

1

Essayez leur plugin autocomplete:

http://docs.jquery.com/Plugins/autocomplete

L'exemple:

var data = "Core Selectors Attributes Traversing Manipulation CSS Events Effects Ajax Utilities".split(" "); 
    $("#example").autocomplete(data); 

Vous pouvez modifier pour l'adapter à la vôtre en utilisant un ajaxLoader de quelque chose comme ARTE:

http://plugins.jquery.com/node/12682

Vous utilisez ce code:

/* init the arte engine */ 
$.arte({'ajax_url':'remote_xml_file_url'}).add_action("xml_node", fct); 

/* the function which will be called every tick with the new node */ 
function fct(data){ 
    window.data = data; 
}