Home > Ajax, JQuery > Fancy Autocomplete Dengan JQuery

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 …. ^_^

Categories: Ajax, JQuery Tags: , ,
  1. July 2nd, 2010 at 14:21 | #1

    thanks banget, sangat berguna!

  2. July 7th, 2010 at 13:10 | #2

    mantaf kalee…

  3. July 8th, 2010 at 11:51 | #3

    woww…..very beautifull…:). Thanks..

  4. July 8th, 2010 at 15:54 | #4

    ini dia yang aku cari, makasih buat sharingnya.. ^^

  5. wahyudi
    July 16th, 2010 at 18:09 | #5

    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

  6. July 19th, 2010 at 05:04 | #6

    It’s cool bro.. semoga semakin banyak yang menyukai dan mendalami AJAX.

  7. July 19th, 2010 at 07:54 | #7

    @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

  8. raiki
    July 21st, 2010 at 20:04 | #8

    makacih,,,banyak,,sangat membantu,,dalam PKL nie,,hwhhw

  9. just_bagus
    July 24th, 2010 at 11:00 | #9

    Matur Suwon Seng katah………. Ini sangat berguna bagi kami yg sedang mendevelop ereporting dinkes

  10. August 16th, 2010 at 10:21 | #10

    Wkwkwkwkkk…….
    Pesbuk bangget ini mah dah……..!!

  11. August 19th, 2010 at 17:29 | #11

    @PREMWOK
    iya memang ini adaptasi dari gaya facebook dan saya coba presentasikan agar semua orang bisa membuat model spt itu. :)

  12. August 31st, 2010 at 13:26 | #12

    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..:)

  13. just_bagus
    September 25th, 2010 at 18:24 | #13

    Ndan Kalo ada tutorial ExtJs. Skalian di post or dikirim ke emailq juga boleh. Thnks

  14. September 25th, 2010 at 23:34 | #14

    Sebenernya xml sama json bisa sama2 digunakan utk buat program semacam ini. Tapi XML itu parsingnya ribet, JSON lebih mudah.

  1. No trackbacks yet.