Saturday, January 7, 2012

Membuat Kotak Dialog dengan jQuery

jQuery Dialog Box

Suatu saat Saya pernah mendapati seorang pendatang yang mengunjungi blog Saya dari kata kunci yang kurang lebihnya seperti ini:

membuat jquery ui dialog di blogspot

Tidak. Jangan pernah melakukan itu. Itu pemborosan! Menerapkan jQuery UI Dialog di dalam blog Saya sebut sebagai pemborosan karena jQuery UI tidak hanya sebatas untuk menciptakan kotak dialog saja. Bagi Saya, jQuery UI cakupannya terlalu besar jika hanya diterapkan untuk sebuah blog. Apalagi jika itu difungsikan untuk menciptakan kotak dialog saja. Alternatifnya adalah, cukup dengan membuat sebuah kerangka kotak dialog dengan kode HTML dan CSS, kemudian atur kemunculannya dengan jQuery yang umum dipakai seperti .show(), .slideDown() dan .fadeIn():

Lihat Demo Unduh Berkas

Kerangka dan Konten

Pada contoh di atas Saya menerapkan kotak dialog sebagai formulir login, tapi itu tidak mutlak. Anda bisa menggunakan kotak dialog ini untuk apa saja, selama Anda tahu bagaimana cara menerapkan elemen pemicu pada tempat yang tepat untuk membuka kotak dialog. Elemen pemicu Saya buat berupa class="open-dialog". Kelas ini bisa diterapkan pada tombol atau link untuk memicu kemunculan kotak dialog:

<button class='open-dialog'>Buka Dialog</button>
<a class='open-dialog' href='#'>Buka Dialog</a>

Kerangka dialog terdiri dari sebuah elemen induk #kotak-dialog, elemen <h3> sebagai judul, overlay sebagai tabir hitam dan beberapa tombol sebagai pemicu aksi lain:

HTML

<!-- START DIALOG BOX -->
<div id='kotak-dialog'>
    <h3 class='title'>Kotak Dialog<a href='#' class='close'>&#215;</a></h3>
    <div class='isi-dialog'>

        Apakah Anda yakin dan tetap ingin melakukan ini?

        <div class='button-wrapper'>
            <button class='okeh'>OK</button> 
            <button class='close'>Cancel</button>
        </div>

    </div>
</div> <!-- end kotak-dialog -->
<div id='dialog-overlay'></div>
<!-- END DIALOG BOX -->

CSS

#kotak-dialog {
  position:absolute;
  top:20%;
  left:50%;
  margin:0px 0px 0px -200px;
  width:400px;
  height:auto;
  background-color:#fff;
  -webkit-box-shadow:0px 1px 2px rgba(0,0,0,0.4);
  -moz-box-shadow:0px 1px 2px rgba(0,0,0,0.4);
  box-shadow:0px 1px 2px rgba(0,0,0,0.4);
  z-index:1000;
  display:none;
}

#kotak-dialog *:focus {
  outline:none;
}

#kotak-dialog h3.title {
  background-color:#3B5998;
  padding:10px 15px;
  color:#fff;
  font:normal 16px Arial,Sans-Serif;
  margin:0px 0px 0px 0px;
  position:relative;
}

#kotak-dialog h3.title a {
  position:absolute;
  top:10px;
  right:15px;
  color:#fff;
  text-decoration:none;
  cursor:pointer;
}

#kotak-dialog .isi-dialog {
  margin:15px;
  font:normal 12px Arial,Sans-Serif;
}

#kotak-dialog .button-wrapper {
  padding:10px 15px 0px;
  border-top:1px solid #ddd;
  margin-top:15px;
}

#kotak-dialog .button-wrapper button {
  background-color:#FF0C39;
  border:none;
  font:bold 12px Arial,Sans-Serif;
  color:#fff;
  padding:5px 10px;
  -webkit-border-radius:3px;
  -moz-border-radius:3px;
  border-radius:3px;
  cursor:pointer;
}

#kotak-dialog .button-wrapper button:hover {
  background-color:#aaa;
}

#dialog-overlay {
  position:fixed !important;
  position:absolute;
  z-index:999;
  top:0px;
  right:0px;
  bottom:0px;
  left:0px;
  background-color:#000;
  display:none;
}

jQuery

$(function() {
     //Tampilkan kotak dialog saat .open-dialog diklik
     $('.open-dialog').click(function() {
          $('#kotak-dialog').show();
          $('#dialog-overlay').fadeTo("normal", 0.4);
          return false;
     });

     //Tutup kotak dialog saat .close diklik
     $('#kotak-dialog .close').click(function() {
          $('#kotak-dialog').fadeOut();
          $('#dialog-overlay').hide();
          return false;
     });

     //Aksi utama dituliskan di sini, saat tombol OK diklik
     $('#kotak-dialog .okeh').click(function() {
          alert("Hapus alert box ini kemudian ganti dengan fungsi tertentu.");
     });
});

Jangan lupa juga untuk memuat library jQuery sebelum menerapkan kode di atas, jika tidak, kode di atas tidak akan pernah bekerja (pelajari tentang jQuery di sini).

Semoga cara singkat ini bisa lebih menghemat baris kode sehingga tidak akan memperberat proses pemuatan halaman blog Anda.

Labels: , ,

32 Comments:

At Saturday, March 10, 2012 at 1:34:00 PM GMT+7, Blogger Putra said...

butuh bantuan mas, kok waktu saya terapin ke blog dummyku malah ada tulisan kayak gini
Template Anda tidak dapat diparse karena tidak well-formed. Harap pastikan bahwa semua elemen XML ditutup dengan benar.
Pesan error XML: The entity "times" was referenced, but not declared.

butuh penjelasannya :(

 
At Saturday, March 10, 2012 at 2:03:00 PM GMT+7, Blogger Taufik Nurrohman said...

@Alam Perwira Oh iya, Saya ngerti. &times; itu memang belum layak diterapkan di template. Itu setahu Saya, mungkin karena belum standar. Sama halnya dengan &hearts; dan yang lainnya.
Kode &times; adalah simbol "×". Kalau di posting tidak masalah menuliskan &times;, tapi kalau di dalam template harus diganti menjadi &#215;

 
At Saturday, March 10, 2012 at 9:12:00 PM GMT+7, Blogger Putra said...

@Taufik Nurrohmandijquery kok gak ada times nya mas?? :(
masih bingung akuu, di masukin waelah kodene sing wis bener nyang coment iki :(

 
At Saturday, March 10, 2012 at 10:16:00 PM GMT+7, Blogger Taufik Nurrohman said...

@Alam Perwira Maksudnya itu lho yang ada di tombol close dialog.
Nggak apa-apa, yang ini sekarang sudah bisa kok.

 
At Saturday, March 10, 2012 at 10:43:00 PM GMT+7, Blogger Putra said...

@Taufik NurrohmanTak coba buat guest book :D

 
At Wednesday, April 11, 2012 at 5:46:00 PM GMT+7, Anonymous Anonymous said...

@Alam PerwiraMas gimana kalau buat iframe, tapi waktu blognya load iframenya ndak ikut load?

Loadnya itu ketika tombol pembuka jQuery UI-nya di klik?

 
At Thursday, April 12, 2012 at 3:39:00 PM GMT+7, Blogger Putra said...

@The7Bloggersudah tak tanyakan sama mas taufik tpi bukan di post ini, kayaknya pake lightbox efek, tp saya masih bingungs 7:(

 
At Saturday, April 14, 2012 at 9:08:00 PM GMT+7, Blogger Taufik Nurrohman said...

@The7Bloggers Sudah Saya buatkan postingnya di sini: Iframe Preloader :)

 
At Sunday, April 15, 2012 at 3:23:00 PM GMT+7, Blogger Taufik Nurrohman said...

@The7Bloggers Oya, satu tambahan lagi: Ini bukan JQuery UI. Ini JQuery biasa :)

 
At Saturday, April 28, 2012 at 8:30:00 AM GMT+7, Blogger uki said...

Kok Saya saya tidak berhasil-berhasil ya ? mohon bantu,mau buat GuestBook :-bd

 
At Saturday, April 28, 2012 at 11:58:00 AM GMT+7, Blogger Taufik Nurrohman said...

@Uqi Coba tanya sama Alam Perwira ^:D

 
At Saturday, April 28, 2012 at 2:12:00 PM GMT+7, Blogger Putra said...

@Taufik Nurrohman Saya adopsi ke konten komentar mas :Q

 
At Friday, June 29, 2012 at 9:50:00 AM GMT+7, Blogger kangJaka said...

susah bos..myobanya

 
At Saturday, July 28, 2012 at 6:10:00 AM GMT+7, Blogger Unknown said...

yeeee terima kasih gan!!! informasinya bagus banget \o/ \o/ \o/ \o/ \o/ \o/

 
At Monday, January 21, 2013 at 4:48:00 PM GMT+7, Blogger Unknown said...

izin copas mas..saya sudah baca kebijakan dan privasinya..dan saya akan taati aturan ini,,terimkasih,, ^_^

 
At Sunday, February 10, 2013 at 10:20:00 AM GMT+7, Blogger azewBz said...

kalau di pake buat login member blogger bisa ga mas?

 
At Sunday, February 10, 2013 at 12:41:00 PM GMT+7, Blogger Taufik Nurrohman said...

Selama kamu bisa membuat formulirnya.

 
At Saturday, February 16, 2013 at 9:54:00 AM GMT+7, Blogger Unknown said...

lalu bagaimana ...dialog boxnya terbuka tepat didepan layar

 
At Friday, February 22, 2013 at 9:32:00 PM GMT+7, Blogger azewBz said...

mas`klau di buat menjadi beberapa, ketika di klik
contoh setiap Link tapi berbeda isi text gimana itu?

soalnya saya coba malah textnya sama semua padahal udah di buat beda isi textnya. apaa harus di bkin double Js sama Css nya??

 
At Saturday, February 23, 2013 at 6:29:00 AM GMT+7, Blogger Taufik Nurrohman said...

Kalau memungkinkan, letakkan semua data kotak dialog ke dalam salah satu atribut di dalam tautan tersebut (pemicu pembukaan kotak dialog), misalnya menggunakan atribut data-dialog-content:

<a class="open-dialog" href="#" data-dialog-content="Apakah Anda yakin?">Hapus?</a>

Setelah itu tambahkan elemen untuk meletakkan teks tersebut di dalam kotak dialog:

...
<p class='dialog-text'></p>
...


Ubah kode ini:

$('#kotak-dialog').show()

Menjadi seperti ini:

$('#kotak-dialog').show()
.find('.dialog-text')
.html($(this).data('dialog-content'));


Di halaman contoh ini Saya juga telah menambahkan atribut data-dialog-title untuk menyimpan judul dialog baru ⇒ DEMO

 
At Sunday, March 24, 2013 at 2:59:00 PM GMT+7, Blogger azewBz said...

mas`ko waktu saya pindahinefek overlay pada tutorial(kotak-pesan)..!
mlah hasilnya beda cek: http://cssdeck.com/labs/full/ilint5ah

element pesan bila di buka tertutup sama efek overlay jdi ga bisa close..!!

 
At Sunday, March 24, 2013 at 5:23:00 PM GMT+7, Blogger Taufik Nurrohman said...

z-index belum diterapkan pada kotak pesan. Nilainya harus lebih besar dari z-index pada overlay:

#kotak-pesan {
z-index:10000;
}


Selain itu letakkan overlay setelah kotak pesan, bukan di dalamnya:

<div id="kotak-pesan"> ... </div>
<div id="dialog-overlay"></div>

 
At Sunday, March 24, 2013 at 6:01:00 PM GMT+7, Blogger azewBz said...

tetep mas ga muncul`saya meyimpan code markup di dlm template..!!
di tag body

cek: http://azewbz.blogspot.com/2013/03/alamat-blog-tematopik-authoradmin-mkr.html
pda bagian text komenta di footer

 
At Sunday, March 24, 2013 at 6:40:00 PM GMT+7, Blogger Taufik Nurrohman said...

Saya cek sudah jadi.

 
At Thursday, April 18, 2013 at 8:35:00 PM GMT+7, Blogger azewBz said...

mas`klau caranya biar waktu saat open biar munculnya halus gimna itu?
ini agak kasar waktu di open, niatnya pgen sama kaya di close ngilangnya secara halus..!!

 
At Thursday, April 18, 2013 at 8:43:00 PM GMT+7, Blogger Unknown said...

kayaknya pake @keyframe hahahay,,sotoy

 
At Friday, April 19, 2013 at 5:16:00 PM GMT+7, Blogger Taufik Nurrohman said...

1. Ganti .show() menjadi .slideDown() atau .fadeIn()
2. Ganti .hide() menjadi .slideUp() atau .fadeOut()

 
At Sunday, April 21, 2013 at 1:30:00 PM GMT+7, Blogger Alwan said...

Mas Taufik, kalo pembuka HTMLnya ditaruh di link gimana ya caranya?? :p

 
At Thursday, May 9, 2013 at 2:01:00 AM GMT+7, Blogger LADIG55official said...

mas kalau halaman "buat item baru" di ganti sama like box gmna ya?
saya sudah coba malah ga jalan alias kosong :D

cek : http://cssdeck.com/labs/hrwntaod

 
At Sunday, September 29, 2013 at 12:07:00 PM GMT+7, Blogger Unknown said...

Haduh... HTML nya kalo di blogspot taruh di bagian mana ya???

 
At Sunday, September 29, 2013 at 12:15:00 PM GMT+7, Blogger Salim said...

Semua kode di atas bisa ditaruh di add gadget HTML. :)

 
At Monday, November 30, 2015 at 6:00:00 AM GMT+7, Blogger Eris said...

terima kasih artikelnya sangat membantu

 

Post a Comment

<< Home