Fancy Autocomplete Dengan JQuery
Seiring berkembanganya aplikasi web, satu per satu fasilitas / feature yang terkesan kaku pada halaman web diubah menjadi interaktif dan dapat menarik perhatian pengunjung web tersebut. Seperti halnya form pencarian, pada saat web belum berkembang seperti sekarang, form pencarian hanya sebatas textbox dan beberapa filter item lainnya, namun kali ini feature pencarian banyak yang dilengkapi dengan feature autocomplete.
Dengan adanya autocomplete, pengunjung sangat dibantu dalam melakukan pencarian karena autocomplete dapat memberikan daftar hasil-hasil pencarian sesuai yang diinput oleh user sebelum user menekan tombol submit atau tombol “cari”. Proses pada background yang melakukan autocomplete pencarian adalah dengan menggunakan Ajax.

Contoh standar form autocomplete
Sekarang saya coba untuk membuat fasilitas autocomplete terlihat lebih menarik / fancy dengan memodifikasi format output hasil pencarian di bawah textbox seperti gambar diatas, menjadi seperti ini:

Form autocomplete yang lebih menarik / fancy
Tentu dengan format autocomplete seperti gambar diatas, pengunjung menjadi lebih terbantu dalam melakukan pencarian data yang lebih akurat karena disertakan juga foto hasil pencarian dan keterangan lainnya. Design diatas terinspirasi dari format hasil autocomplete di facebook.
Untuk membuat fasilitas autocomplete seperti gambar diatas anda harus mempersiapkan database MySQL dengan table “pegawai“,dengan struktur table seperti di bawah ini:
CREATE TABLE IF NOT EXISTS `pegawai` ( `NIP` char(5) COLLATE latin1_general_ci NOT NULL, `nama` varchar(30) COLLATE latin1_general_ci NOT NULL, `telepon` varchar(25) COLLATE latin1_general_ci NOT NULL, `umur` int(2) NOT NULL, `alamat` varchar(100) COLLATE latin1_general_ci NOT NULL, `foto` varchar(100) COLLATE latin1_general_ci NOT NULL, PRIMARY KEY (`NIP`) ) ENGINE=MyISAM ;
Isilah beberapa data dan jangan lupa masukan lokasi gambar profile pegawai tersebut pada field “foto“, contohnya: foto_pegawai/si_andy.jpg.

Masukan contoh data dan isi beberapa field foto
Seperti yang sudah dijelaskan sebelumnya, proses background pada fasilitas autocomplete dengan memakai Ajax, jadi anda harus mempersiapkan terlebih dahulu aplikasi server untuk request data dari hasil pencarian di textbox autocomplete, aplikasi server dapat anda buat dengan bahasa pemrograman PHP, ASP, JSP atau lainnya. Saya beri contoh untuk script PHP, yaitu:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | <?php /* * JQuery autocomplete selalu mengirimkan parameter dengan nama "q" * dimana isi dari "q" adalah inputan dari textbox pada file "index.html" * */ if(isset($_GET['q'])){ mysql_connect('localhost','root','123456'); # koneksi ke database mysql_select_db('test'); # pilih table /* * parameter "q" harus di-filter minimal dengan mysql_escape_string * hanya untuk berjaga-jaga apabila ada inputan dengan karakter khusus * yang error ketika dibaca oleh syntax query MySQL * */ $param = mysql_escape_string($_GET['q']); # lakukan pencarian, tampilkan nama pegawai yang berawalan nilai parameter "q" $query = mysql_query("SELECT * FROM pegawai WHERE nama LIKE '$param%'") or die(mysql_error()); if(mysql_num_rows($query) > 0){ $data = array(); # siapkan variable untuk menampung keseluruhan data while($row = mysql_fetch_object($query)){ $data[] = $row; # input data ke variable array satu per satu baris hasil query } /* * Variable yang mengandung keseluruhan data dari query lalu di konversi * ke JSON dengan fungsi dari PHP5 "json_encode". Hasil keluaran ini akan * diterima dan di proses oleh Ajax di plugin autocomplete pada file "index.html" * */ die(json_encode($data)); /* * lebih jauh tentang implementasi JSON pada aplikasi Ajax dapat anda lihat di artikel di blog saya * http://chandrajatnika.com/2009/02/implementasi-json-pada-aplikasi-ajax/ * */ } } ?> |
Format hasil keluaran program diatas adalah JSON, agar lebih memudahkan JavaScript dalam melakukan parsing data. Lalu script utama untuk memproses data dari server adalah sebagai berikut:
9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | $(function(){ /* id inputan yang akan melakukan proses autocomplete adalah "suggest" request data autocomplete menuju ke "search.php" */ $('#suggest').autocomplete('search.php', { /* parameter "parse" pada script ini sebenarnya adalah deklarasi ulang dari event parse di library jquery-autocomplete. fungsinya adalah untukmenghandle data yang diterima, karena data yang diterima adalah Ajax maka penanganannya adalah sebagai berikut: */ parse: function(data){ var parsed = []; for (var i=0; i < data.length; i++) { parsed[i] = { data: data[i], value: data[i].nama // nama field yang dicari }; } return parsed; }, /* pada parameter formatItem, kita dapat mengcustom tampilan yang akan muncul ketika ada result dari hasil pencarian autocomplete, kalau formatItem ini tidak di deklarasikan maka hanya akan muncul berupa daftar nama yang terkesan kaku */ formatItem: function(data,i,max){ var str = '<div class="search_content">'; /* tampilkan foto, apabila foto kosong, maka tampilkan default unknown image berapapun lebar foto ini, tingginya disesuaikan menjadi 50px agar tidak menghabiskan tempat */ str += '<img src="'+(data.foto ? data.foto : 'foto/unknown.jpeg')+'" height="50" align="left" />'; /* variable "data" merupakan variable dengan tipe json atau array assosiatif javascript 1 dimensi oleh karena itu dalam mengambil setiap pada "data" hanya dengan "data.nama_property" */ str += '<u>'+data.nama+'</u><br />'+data.alamat+'<br />Telp: '+data.telepon;; str += '</div>'; return str; }, width: 270, // panjang tampilan pencarian autocomplete yang akan muncul di bawah textbox pencarian dataType: 'json' // tipe data yang diterima oleh library ini disetup sebagai JSON } ).result( // fungsi ini akan dipanggil setelah user memilih salah satu result pencarian autocomplete function(event,data,formated){ /* variable "data" merupakan variable dengan tipe json atau array assosiatif javascript 1 dimensi oleh karena itu dalam mengambil setiap pada "data" hanya dengan "data.nama_property" */ $('#pegawaiDetail').show(); // tampilan table detail yang di hide sebelumnya $('#dataNIP').text(data.NIP); $('#dataNama').text(data.nama); $('#dataAlamat').text(data.alamat); $('#dataTelepon').text(data.telepon); $('#dataUmur').text(data.umur); // tampilkan foto pada element <img id="dataFoto">, apabila foto kosong, maka tampilkan default unknown image $('#dataFoto').attr('src',data.foto ? data.foto : 'foto/unknown.jpeg'); } ); }); |
Pada contoh kali ini, kita menggunakan plugin dari jQuery yaitu jQuery.AutoComplete.js. Hasil output dari plugin ini masih sangat sederhana, oleh karena itu perlu ada modifikasi hasil output agar terlihat lebih menarik / fancy tanpa harus mengubah core dari plugin jQuery tersebut.
Untuk lebih jelasnya, silahkan lihat demo dan download script pada artikel ini.
Terima kasih, semoga bermanfaat. Maaf sudah lama saya nggak update blog, author-nya lagi sibuk :p …. ^_^


Chandra Jatnika

thanks banget, sangat berguna!
mantaf kalee…
woww…..very beautifull…:). Thanks..
ini dia yang aku cari, makasih buat sharingnya.. ^^
kok saya coba gk jalan ya mas?
apa karena saya pake mysql versi 3.23.47-nt?
soalnya saya juga download yang combo box dinamis dengan JQuery databasenya juga gak kebaca tuh
mohon penjelasannya
trimakasih
It’s cool bro.. semoga semakin banyak yang menyukai dan mendalami AJAX.
@wahyudi:
klo mysql pake versi 3. PHP anda versi brapa?
PHP versi 5 keatas baru dukung fungsi json_encode, mungkin gara2 itu gak bisa jalan mas. coba update dengan paket PHP dan MySQL yang lebih up-to-date
makacih,,,banyak,,sangat membantu,,dalam PKL nie,,hwhhw
Matur Suwon Seng katah………. Ini sangat berguna bagi kami yg sedang mendevelop ereporting dinkes
Wkwkwkwkkk…….
Pesbuk bangget ini mah dah……..!!
@PREMWOK
iya memang ini adaptasi dari gaya facebook dan saya coba presentasikan agar semua orang bisa membuat model spt itu.
manteb mas,,
mau tanya,,klu gk salah tu pake JSON ya mas..
saya pernah liat ada jg yg pake XML..
menurut mas,,bagusan mana JSON dgn XML…
ato keduanya beda fungsional ?
maaf klu salah,,masih newbie tnt ajax..:)
Ndan Kalo ada tutorial ExtJs. Skalian di post or dikirim ke emailq juga boleh. Thnks
Sebenernya xml sama json bisa sama2 digunakan utk buat program semacam ini. Tapi XML itu parsingnya ribet, JSON lebih mudah.