jquery UI autocomplete remote multiple value option
jquery-ui-autocomplete
Solution
Finally I found an answer to my problems !! This is the final code using multiple values/inputs with getting responses from a remote mysql DB.
$(function() {
function split( val ) {
return val.split( /,\s*/ );
}
function extractLast( term ) {
return split( term ).pop();
}
$( "#companyautocomplete" )
// don't navigate away from the field on tab when selecting an item
.bind( "keydown", function( event ) {
if ( event.keyCode === $.ui.keyCode.TAB &&
$( this ).data( "autocomplete" ).menu.active ) {
event.preventDefault();
}
})
.autocomplete({
source: function( request, response ) {
$.getJSON( "company_search.php",{
term: extractLast( request.term )},
function( data ) {
response( $.map( data, function( item ) {
return {
compid: item.compid,
label: item.value + ' (' + item.address + ', ' + item.city + ', ' + item.state + ', ' + item.zipcode + ')',
value: item.value,
address: item.address + ', ' + item.city + ', ' + item.state + ', ' + item.zipcode,
phone: item.phone,
problematic: item.problematic
}
}));
}
);
},
search: function() {
// custom minLength
var term = extractLast(this.value);
if (term.length < 3) {
return false;
}
},
focus: function() {
// prevent value inserted on focus
return false;
},
select: function( event, ui ) {
$('#companyautocomplete').val(ui.item.value);
$('#companyid').val(ui.item.compid);
$('#c_address').val(ui.item.address);
$('#c_phone').val(ui.item.phone);
if (ui.item.problematic!=1){
$('#companyautocomplete').removeClass("ui-autocomplete-error");
document.getElementById('Sendbutton').style.display="block";
} else {
$('#companyautocomplete').addClass("ui-autocomplete-error");
document.getElementById('Sendbutton').style.display="none";
}
}
});
});
Now it works like a charm. I hope this helps someone else looking for an answer.
Problem
I currently have a code working using the UI autocomplete and seems to display the correct data I get from my mysql DB. Now I want to complicate things by been able to accept more than 1 value. I have searched the internet up and down and still cannot fix my code in order to work, I am a newbie with jquery and specially with autocomplete. Here is what I have so far.. ``` $('#companyautocomplete').autocomplete({ source: function(request, response) { //separator: ' ', $.ajax({ url: "company_search.php", dataType: "json", data: { name_startsWith: request.term, term: $('#companyautocomplete').val(), }, success: function(data) { response($.map(data, function(item) { return { compid: item.compid, label: item.value + ' (' + item.address + ', ' + item.city + ', ' + item.state + ', ' + item.zipcode + ')', value: item.value, address: item.address + ', ' + item.city + ', ' + item.state + ', ' + item.zipcode, phone: item.phone, problematic: item.problematic } })) }, }); }, select: function(event, ui) { $('#companyautocomplete').val(ui.item.value); $('#companyid').val(ui.item.compid); $('#c_address').val(ui.item.address); $('#c_phone').val(ui.item.phone); if (ui.item.problematic!=1){ $('#companyautocomplete').removeClass("ui-autocomplete-error"); document.getElementById('Sendbutton').style.display="block"; } else { $('#companyautocomplete').addClass("ui-autocomplete-error"); document.getElementById('Sendbutton').style.display="none"; } } }); ``` This is the response I get from the company_search.php... ``` [{"compid":"36","value":"MCDONALD OF ALL SAINTS RD","address":"9261 all saints rd","phone":"","problematic":"0","zipcode":"20723","city":"Laurel","state":"MD","completeaddress":"9261 all saints rd, Laurel, MD, 20723"},{"compid":"37","value":"MCDONALD OF BOWIE","address":"4306 nw CRAIN HWY","phone":"","problematic":"0","zipcode":"20716","city":"Bowie","state":"MD","completeaddress":"4306 nw CRAIN HWY, Bowie, MD, 20716"}] ``` So far it all works as I want but it doesn't accept more than 1 value, how can I achieve this ? Thanks in advance !!