6 JAVASCRIPT 6.1 Pengenalan JavaScript Apa itu JavaScript? JavaScript merupakan sebuah bahasa scripting yang dikembangkan oleh Netscape. JavaScript digolongkan sebagai bahasa scripting sisi klien (client side scripting) artinya bahwa script JavaScript tersebut akan dieksekusi atau dijalankan pada komputer kita sendiri saat kita membuka suatu halaman web yang berisi script JavaScript. Dengan JavaScript kita dapat dengan mudah membuat halaman web yang interaktif. Menjalankan JavaScript Apa yang diperlukan untuk menjalankan script yang ditulis dengan JavaScript? Kita perlu JavaScript-enabled browser yaitu browser yang mampu menjalankan JavaScript – misalnya Netscape Navigator (versi 2.0 ke atas ) atau Microsoft Internet Explorer (MSIE - versi 3.0 ke atas). Mengingat kedua browser di atas telah banyak beredar dan digunakan, pemilihan JavaScript sebagai untuk meningkatkan kemampuan halaman web menjadi sangat baik. Untuk menggunakan JavaScript kita harus telah mengenal baik HTML. 105 Diktat Kuliah Internet & Web Disain – Herman Tolle - UB Mencantumkan JavaScript pada halaman HTML Kode JavaScript dituliskan langsung pada halaman HTML. Mari kita lihat contoh sederhana berikut ini untuk mengerti bagaimana JavaScript bekerja: <html> <body> <br> Ini halaman HTML normal. <br> <script language="JavaScript"> document.write("Yang ini akibat JavaScript!") </script> <br> Ini HTML lagi. </body> </html> Contoh sederhana di atas kelihatan seperti halaman HTML normal. Satu-satunya hal yang baru adalah bagian: <script language="JavaScript"> document.write("Yang ini akibat JavaScript!") </script> Bagian di atas adalah contoh penggunaan JavaScript. Untuk melihat hasilnya simpan file di atas sebagai file HTML normal dan buka dari JavaScript-enabled browser. Hasilnya akan terlihat seperti berikut ini: (jika kita menggunakan JavaScript-enabled browser akan terlihat 3 baris): 106 Diktat Kuliah Internet & Web Disain – Herman Tolle - UB Ini halaman HTML normal. Yang ini akibat JavaScript! Ini HTML lagi. Sebenarnya script di atas tidaklah begitu berguna, namun bisa memberikan gambaran bagaimana cara menggunakan tag <script>. Segala sesuatu yang berada di antara tag <script> dan </script> diinterpretasi-kan sebagai kode JavaScript. Di situ kita bisa melihat penggunaan document.write() – salah satu perintah yang penting dalam pemrograman dengan JavaScript. document.write() digunakan untuk menulis sesuatu pada dokumen (dalam hal ini adalah dokumen HTML). Jadi program JavaScript sederhana kita di atas berfungsi untuk menuliskan text “Yang ini akibat JavaScript!” ke dokumen HTML. Non-JavaScript browser Apa yang akan terjadi jika kita menggunakan browser yang tidak mengerti JavaScript? Non-JavaScript browser tidak mengenal tag <script>. Dia akan mengabaikan tag itu dan mengeluarkan seluruh kode selayaknya text biasa . Ini berarti bahwa user akan melihat kode JavaScript program kita yang ada di dokumen HTML. Ini tentunya bukan hal yang kita harapkan. Ada cara untuk menyembunyikan baris kode dari browser yang seperti itu, yaitu dengan menggunakan HTML-comments <!-- -->. Baris kode kita yang baru akan terlihat seperti ini: <html> <body> <br> Ini dokumen HTML normal <br> 107 Diktat Kuliah Internet & Web Disain – Herman Tolle - UB <script language="JavaScript"> <!-- hide from old browsers document.write("Yang ini akibat JavaScript!") // --> </script> <br> Ini HTML lagi. </body> </html> Tampilan pada non-JavaScript browser akan terlihat seperti ini: Ini dokumen HTML normal Ini HTML lagi Tanpa HTML-comment tampilan pada non-JavaScript browser akan seperti: Ini dokumen HTML normal document.write("Ini akibat JavaScript!") Ini HTML lagi Harap diingat bahwa kita tidak bisa menyembunyikan baris kode JavaScript secara keseluruhan. Apa yang kita lakukan di atas adalah upaya untuk menyembunyikan kode dari browser-browser ‘tua’ yang tidak mengerti JavaScript. Melalui menu 'View document source' tetap saja baris kode JavaScript yang ada akan kelihatan. 108 Diktat Kuliah Internet & Web Disain – Herman Tolle - UB Event Event dan event handler merupakan hal yang sangat penting dalam pemrograman JavaScript. Event adalah sesuatu yang terjadi karena aksi user. Contohnya jika user men-click tombol mouse terjadilah event Click. Jika mousepointer bergerak melewati sebuah link terjadilah event MouseOver. Ada banyak event yang terdapat dalam JavaScript yang selengkapnya bisa di lihat pada JavaScript Reference. Tentunya kita ingin program JavaScript kita bereaksi jika terjadi suatu event tertentu. Ini bisa dilakukan dengan bantuan eventhandlers. Sebagai contoh kita memiliki sebuah tombol yang akan mengeluarkan sebuah popup window jika di-tekan. Ini berarti bahwa sebuah window popup harus muncul sebagai reaksi dari event Click. Event-handler yang harus kita gunakan adalah onClick, yang memberitahukan apa yang harus dikerjakan oleh komputer jika event ini terjadi. Contoh di bawah ini menunjukkan bagaimana mudahnya menggunakan event-handler onClick: <form> <input type="button" value="Click me" onClick="alert('Ya')"> </form> Ada beberapa hal baru dalam kode di atas, mari kita lihat satu per satu. Kita telah membuat form dan sebuah tombol (ini merupakan bahasa HTML standard). Bagian yang baru adalah onClick="alert('Ya')" yang berada di dalam tag <input>. Inilah yang mendefinisikan apa yang akan terjadi jika tombol ditekan. Jadi jika terjadi event Click, komputer akan mengeksekusi alert('Ya'), yang merupakan kode JavaScript (perhatikan bahwa kita tidak menggunakan tag <script> pada kasus ini). Fungsi alert() berfungsi untuk menampilkan window popup. Di dalam tanda kurung kita tentukan string yang akan muncul pada 109 Diktat Kuliah Internet & Web Disain – Herman Tolle - UB window yang dimaksud. Jadi script kita di atas menampilkan window dengan tulisan 'Ya' saat user men-click tombol. Satu hal yang mungkin membingungkan: pada perintah document.write() kita menggunakan double quotes (") dan pada alert() kita menggunakan juga single quotes ('), mengapa? Pada contoh ini kita menuliskan onClick="alert('Yo')" – kita gunakan keduanya (double dan single quote) . Jika kita tulis onClick="alert("Yo")" maka komputer akan bingung mana yang menjadi bagian event-handler onClick dan mana yang bukan. Urutan penggunaannya tidak menjadi masalah. Jadi bisa juga kita tuliskan onClick='alert("Yo")'. Ada banyak event-handler lain yang bisa kita gunakan. Selengkapnya dapat dilihat pada referensi JavaScript. Function Pada dasarnya function merupakan cara untuk menyatukan beberapa perintah. Mari kita tulis sebuah script yang mengeluarkan teks tertentu sebanyak tiga kali. Perhatikan contoh berikut ini: <html> <script language="JavaScript"> <!-- hide document.write("Selamat datang pada homepage saya!<br>"); document.write("Ini menggunakan JavaScript!<br>"); document.write("Selamat datang pada homepage saya!<br>"); document.write("Ini menggunakan JavaScript!<br>"); 110 Diktat Kuliah Internet & Web Disain – Herman Tolle - UB document.write("Selamat datang pada homepage saya!<br>"); document.write("Ini menggunakan JavaScript!<br>"); // --> </script> </html> Hasil keluarannya akan seperti: Selamat datang pada homepage saya! Ini menggunakan JavaScript! sebanyak tiga kali. Perhatikan baris kode, menuliskan kode sebanyak tiga kali akan memberikan hasil yang diinginkan. Tapi apakah ini efisien? Tidak, kita dapat mebuatnya lebih baik lagi seperti pada kode di bawah ini: <html> <script language="JavaScript"> <!-- hide function myFunction() { document.write("Selamat datang pada homepage saya!<br>"); document.write("Ini menggunakan JavaScript!<br>"); } myFunction(); myFunction(); myFunction(); // --> </script> </html> 111 Diktat Kuliah Internet & Web Disain – Herman Tolle - UB Pada script di atas kita definisikan sebuah function yang dilakukan melalui baris-baris: function myFunction() { document.write("Selamat datang pada homepage saya!<br>"); document.write("Ini menggunakan JavaScript!<br>"); } Perintah-perintah di dalam tanda {} merupakan milik function myFunction(). Ini berarti ada dua perintah document.write() yang dijadikan satu dan dapat dieksekusi melalui pemanggilan function yang dimaskud. Pada contoh kita memanggil function ini sebanyak tiga kali dan berarti bahwa function akan dieksekusi sebanyak tiga kali. Functions dapat pula dikombinasikan dengan event-handler seperti pada contoh berikut ini: <html> <head> <script language="JavaScript"> <!-- hide function calculation() { var x = 12; var y = 5; var result = x + y; alert(result); } // --> </script> 112 Diktat Kuliah Internet & Web Disain – Herman Tolle - UB </head> <body> <form> <input type="button" value="Calculate" onClick="calculation()"> </form> </body> </html> Tombol akan memanggil function calculation() jika di-click. Kita lihat bahwa function melakukan perhitungan tertentu sehingga kita perlu menggunakan variabel x, y dan result. Kita mendefinisikan variabel dengan keyword var. Variables dapat digunakan untuk menyimpan harga-harga yang berbeda- seperti angka, text, strings dan lainnya. Baris var result= x + y; memberitahu browser untuk membuat variabel result dan menyimpan harga x + y (5 + 12) dalam variabel result. Setelah operasi ini isi variabel result adalah 17. Perintah alert(result) artinya sama dengan alert(17), yaitu popup window akan muncul dengan isi angka 17. 6.2 DOKUMEN HTML Hirarki JavaScript Dalam sebuah halaman web terdapat bermacam-macam elemen seperti gambar (image), link, form, tombol, input text, dan sebagainya. JavaScript menyusun semua elemen halaman web dalam satu susunan hirarki. Setiap elemen dilihat sebagai object. Setiap object dapat memiliki beberapa properti (yang menentukan sifat dan tampilannya) dan method (yang menentukan apa yang bisa dikerjakan oleh object yang bersangkutan). Dengan bantuan JavaScript kita dapat dengan mudah memanipulasi object-object 113 Diktat Kuliah Internet & Web Disain – Herman Tolle - UB tersebut. Untuk ini kita harus mengerti hirarki dari semua objectobject HTML. Sebagai contoh kode berikut ini merupakan halaman HTML sederhana berikut ini. <html> <head> </head> <body bgcolor=#ffffff> <center> <img src="home.gif" name="pic1" width=200 height=100> </center> <p> <form name="myForm"> Name: <input type="text" name="name" value=""><br> e-Mail: <input type="text" name="email" value=""><br><br> <input type="button" value="Push me" name="myButton" onClick="alert('Yo')"> </form> <p> <center> <img src="ruler.gif" name="pic4" width=300 height=15> <p> <a href="http://www.hermantolle.org/index.html">My homepage</a> </center> </body> </html> 114 Diktat Kuliah Internet & Web Disain – Herman Tolle - UB dengan tampilan sebagai berikut: Gambar 6.1. Elemen-elemen dari sebuah Halaman Web Kita lihat ada dua image, satu link dan sebuah form dengan dua text field dan sebuah tombol. Dari pandangan JavaScript window browser adalah sebuah window-object. Window-object ini berisi elemenelemen seperti statusbar. Di dalam window kita dapat me-load dokumen HTML (atau file bertipe lain - kita batasi dulu pada file HTML). Halaman ini merupakan sebuah document-object. Artinya document-object mewakili dokumen HTML yang di-load pada saat itu. Document-object merupakan object yang sangat penting dalam JavaScript – kita akan sering menggunakannya. Properti dari document-object contohnya adalah warna background halaman. 115 Diktat Kuliah Internet & Web Disain – Herman Tolle - UB Berikut ini ilustrasi hirarki yang dibuat oleh contoh halaman HTML di atas: Gambar 6.2. Hirarki Dokumen HTML Untuk bisa memperoleh informasi tentang suatu object tertentu dan memanipulasinya kita harus tahu bagaimana mengaksesnya. Kita dapat mengetahui nama object-object yang ada berdasarkan pada hirarki di atas. Misalnya untuk mengakses image pertama kita harus melihat pada hirarki dimulai dari atas. Object pertama disebut document. Image pertama dalam halaman itu diwakili oleh images[0]. Ini artinya kita dapat mengakasesnya melalui JavaScript dengan nama document.images[0]. Demikian juga jika misalnya kita ingin mengetahui apa yang di masukkan user pada elemen pertama dari form, kita harus terlebih dahulu tahu bagaimana mengakses object yang dimaksud. Kita mulai lagi dari atas hirarki. Ikuti terus jalurnya sampai menemukan object bernama elements[0] – satukan semua nama object yang terlewati, sehingga kita menemukan nama text field pertama yaitu: document.forms[0].elements[0] Sekarang bagaimana kita bisa mengetahui isi dari text yang dimaksukkan user? Kita harus mengakses proprty atau method-nya. 116 Diktat Kuliah Internet & Web Disain – Herman Tolle - UB Untuk mengetahui secara lengkap properti dan method apa yang dimiliki oleh object kita dapat melihat referensi JavaScript. Di situ kita akan melihat bahwa text field memiliki properti value yang berisi text yang dimasukkan kedalamnya oleh user. Sekarang kita dapat membaca apa yang dimasukkan user misalnya dengan baris berikut ini: name = document.forms[0].elements[0].value; Isinya akan disimpan dalam variabel name sehingga sekarang kita dapat bekerja dengan variabel ini. Misalnya kita dapat membuat window popup dengan alert("Hi " + name). Jika input adalah 'Yulia’ perintah alert("Hi " + name) akan mengeluarkan window popup dengan text 'Hi Yulia'. Jika kita memiliki halaman HTML yang besar, akan sangat merepotkan mengakses object-object yang ada dengan angka-angka contohnya apakah document.forms[3].elements[17] ataukah document.forms[2].elements[18]? Untuk menghindari kesulitan ini kita dapat memberi nama yang unik untuk setiap object. Sekarang kita tulis lagi kode HTML di atas sebagai berikut: <form name="myForm"> Name: <input type="text" name="name" value=""><br> ... Dengan cara seperti ini, kita dapat mengakses forms[0] dengan myForm, dan elements[0] dengan name Jadi selain menuliskan name= document.forms[0].elements[0].value; kita dapat juga menuliskan name= document.myForm.name.value; yang menjadikan pekerjaan jauh lebih mudah – terutama untuk halaman yang besar dengan object-object yang banyak. (Harap diingat bahwa kita harus mempertahankan huruf besar dan huruf 117 Diktat Kuliah Internet & Web Disain – Herman Tolle - UB kecil – artinya kita tidak bisa menulis myform untuk myForm). Properti object-object JavaScript tidak cuma dibatasi pada operasi pembacaan saja. Kita dapat juga mengisi harga baru untuk properti tertentu. Contohnya kita dapat menulis string baru ke text field sebagai berikut. <form name="myForm"> <input type="text" name="input" value="bla bla bla"> <input type="button" value="Write" onClick="document.myForm.input.value= 'Ya ya ya!'; "> Sebagai contoh terakhir, ketikkan baris kode di bawah ini dan jalankan lalu amati apa yang terjadi. <html> <head> <title>Objects</title> <script language="JavaScript"> <!-- hide function first() { // creates a popup window with the // text which was entered into the text element alert("The value of the textelement is: " + document.myForm.myText.value); } 118 Diktat Kuliah Internet & Web Disain – Herman Tolle - UB function second() { // this function checks the state of the checkbox var myString= "The checkbox is "; // is checkbox checked or not? if (document.myForm.myCheckbox.checked) myString+= "checked" else myString+= "not checked"; // output string alert(myString); } // --> </script> </head> <body bgcolor=lightblue> <form name="myForm"> <input type="text" name="myText" value="bla bla bla"> <input type="button" name="button1" value="Button 1" onClick="first()"> <br> <input type="checkbox" name="myCheckbox" CHECKED> <input type="button" name="button2" value="Button 2" onClick="second()"> </form> 119 Diktat Kuliah Internet & Web Disain – Herman Tolle - UB <p><br><br> <script language="JavaScript"> <!-- hide document.write("The background color is: "); document.write(document.bgColor + "<br>"); document.write("The text on the second button is: "); document.write(document.myForm.button2.value); // --> </script> </body> </html> 6.3 WINDOW Membuat window Kemampuan membuka window browser baru merupakan salah satu keunggulan JavaScript. Kita bisa me-load dokumen (misalnya dokumen HTML) ke window yang baru itu atau bahkan membuat dokumen baru (on-the-fly). Pertama mari kita lihat bagaimana cara membuka window baru, me-load halaman HTML kedalam window ini dan kemudian menutupnya. Script berikut ini membuka browser window baru dan me-load sebuah halaman page: 120 Diktat Kuliah Internet & Web Disain – Herman Tolle - UB <html> <head> <script language="JavaScript"> <!-- hide function openWin() { myWin= open("bla.htm"); } // --> </script> </head> <body> <form> <input type="button" value="Open new window" onClick="openWin()"> </form> </body> </html> Halaman bla.htm di-load kedalam window yang baru melalui method open() jika tombol ditekan. Kita dengan gampang bisa mengatur tampilan window baru itu. Misalnya menentukan apakah window akan memiliki statusbar, toolbar atau menubar serta menentukan ukuran window. Script berikut ini membuka window baru yang berukuran 400x300, tidak memiliki statusbar, toolbar atau menubar. <html> <head> 121 Diktat Kuliah Internet & Web Disain – Herman Tolle - UB <script language="JavaScript"> <!-- hide function openWin2() { myWin= open("bla.htm", "displayWindow", "width=400, height=300, status=no, toolbar=no, menubar=no"); } // --> </script> </head> <body> <form> <input type="button" value="Open new window" onClick="openWin2()"> </form> </body> </html> Hasilnya akan terlihat seperti ini: Ini halaman percobaan 122 Diktat Kuliah Internet & Web Disain – Herman Tolle - UB Terlihat bahwa kita menentukan properti-nya "width=400,height=300,status=no,toolbar=no,menubar=no". dengan Kita tidak boleh menggunakan spasi dalam string ini! Berikut ini daftar properti yang dimiliki sebuah window: Directories yes|no Height number of pixels Location yes|no Menubar yes|no Resizable yes|no Scrollbars yes|no Status yes|no Toolbar yes|no Width number of pixels Beberapa properti baru telah ditambahkan pada JavaScript 1.2 (Netscape Navigator 4.0). Kita tidak bisa menggunakan properti ini dalam Netscape 2.x atau 3.x serta Microsoft Internet Explorer 3.x karena browser-browser ini tidak mengerti JavaScript 1.2. Berikut ini properti baru tersebut: alwaysLowered yes|no AlwaysRaised yes|no dependent yes|no hotkeys yes|no innerWidth number of pixels (replaces width) 123 Diktat Kuliah Internet & Web Disain – Herman Tolle - UB innerHeight number of pixels (replaces height) outerWidth number of pixels outerHeight number of pixels screenX position in pixels screenY position in pixels titlebar yes|no z-lock yes|no Kita bisa memperoleh penjelasan tentang properti ini dalam JavaScript 1.2 Guide. Dengan properti ini kita bisa men-definisikan pada posisi mana window akan dibuka. Nama window Kita menggunakan tiga argumen untuk membuka sebuah window: myWin = open("bla.htm", "displayWindow", "width=400,height=300,status=no,toolbar=no,menubar= no"); Apa guna dari argumen kedua? Ini adalah nama window. Jika kita tahu nama dari window kita bisa me-load halaman baru kedalamnya dengan: <a href="bla.html" target="displayWindow"> Di sini kita perlu nama window (jika windownya tidak ada, window baru akan dibuat secara otomatis). Perhatikan bahwa myWin bukan nama window walaupun kita bisa mengakses window melalui variabel ini. Variabel ini merupakan variabel lokal yang hanya berlaku di dalam script tempat ia di-definisikan. Nama window yang global (displayWindow) merupakan nama yang unik yang dapat digunakan oleh seluruh window browser yang sedang terbuka. 124 Diktat Kuliah Internet & Web Disain – Herman Tolle - UB Menutup window Kita dapat menutup suatu window melalui JavaScript dengan method close(). Mari kita buka window baru seperti sebelumnya. Pada window ini kita me-load halaman berikut: <html> <script language="JavaScript"> <!-- hide function closeIt() { close(); } // --> </script> <center> <form> <input type=button value="Close it" onClick="closeIt()"> </form> </center> </html> Jika kita menekan tombol "Close it" pada window yang baru itu, window-nya akan tertutup. Method open() dan close() merupakan method dari window-object. Seharusnya kita menuliskannya sebagai window.open() dan window.close() dan bukan open() dan close() saja. Tetapi ini dibolehkan karena pada window-object kita tidak 125 Diktat Kuliah Internet & Web Disain – Herman Tolle - UB harus menulis window jika kita ingin memanggil method yang ada padanya (khusus untuk window-object). 6.4 STATUS BAR dan TIME OUT Statusbar Program JavaScript dapat menulisi statusbar – satu baris yang terdapat pada bagian bawah window browser - dengan mengisikan string kepada window.status. Contoh berikut ini menunjukkan dua tombol yang bisa digunakan untuk menulis statusbar dan menghapusnya: <html> <head> <script language="JavaScript"> <!-- hide function statbar(txt) { window.status = txt; } // --> </script> </head> <body> <form> <input type="button" name="look" value="Write!" onClick="statbar('Hi! This is the statusbar!');"> 126 Diktat Kuliah Internet & Web Disain – Herman Tolle - UB <input type="button" name="erase" value="Erase!" onClick="statbar('');"> </form> </body> </html> Pada contoh di atas, kita membuat sebuah form dengan dua buah tombol. Kedua tombol itu memanggil function statbar(). Lihat bahwa pemanggilan function yang dilakukan oleh tombol Write! adalah seperti berikut: statbar('Hi! This is the statusbar!'); Di dalam tanda kurung kita tentukan string 'Hi! This is the statusbar!'. String ini diberikan kepada function statbar(). Kita definisikan function statbar() seperti ini: function statbar(txt) { window.status = txt; } String txt ditampilkan pada Statusbar melalui window.status = txt. Menghapus text pada Statusbar dilakukan dengan memberikan string kosong pada window.status. Jika kita menggerakkan mouse pointer pada sebuah link, maka biasanya statusbar akan menampilkan URL link yang bersangkutan. Dengan bantuan JavaScript kita bisa menampilkan keterangan yang lebih informatif daripada URL yang berupa kalimat. Contoh link berikut ini memperlihatkan hal di atas – gerakkan mousepointer pada link: 127 Diktat Kuliah Internet & Web Disain – Herman Tolle - UB <a href="dontclck.htm" onMouseOver="window.status='Don\'t click me!'; return true;" onMouseOut="window.status='';">link</a> Di sini kita menggunakan event onMouseOver dan onMouseOut untuk mendeteksi apakah mousepointer bergerak sepanjang link. Mengapa kita harus menulis “return true” di dalam properti onMouseOver? Ini ditulis agar browser tidak mengeksekusi kodenya sendiri sebagai reaksi dari event MouseOver. Biasanya browser akan menampilkan URL dari link pada statusbar jika ada event ini. Jika kita tidak mengunakan “return true”, browser akan menulis statusbar sesaat setelah kode kita dieksekusi – artinya browser akan menimpa text yang kita inginkan dan user tidak akan pernah sempat membacanya. Secara umum kita bisa menekan aksi-aksi browser dengan menggunakan “return true” dengan cara yang sama. Event onMouseOut tidak terdapat pada JavaScript 1.0, jadi jika kita menggunakan Netscape Navigator 2.x mungkin akan mendapatkan hasil yang berbeda untuk berbagai platforms. Pada platform Unix misalnya, text akan menghilang walaupun browser tidak mengenal onMouseOut. Pada Windows text tidak menghilang. Jika diinginkan script kompatibel dengan Netscape 2.x pada Windows kita mungkin menulis function yang menulis text ke statusbar dan menghapus text ini setelah sekian waktu tertentu. Ini diprogram melalui timeout. Kita akan mempelajari tentang timeouts pada bagian selanjutnya. Pada contoh script di atas, ada hal yang perlu kita perhatikan yaitu kita mengeluarkan tanda petik. Kita ingin mengeluarkan string Don't click me - karena kita meletakkan string ini di dalam onMouseOver event-handler kita harus menggunakan single quote. Tapi kata Don't juga menggunakan single quote! Browser akan bingung jika kita hanya menulis 'Don't ...'. Untuk mengatasi hal ini kita harus menggunakan backslash \ sebelum quote, yang akan memerintahkan browser bahwa tanda setelahnya merupakan bagian dari string yang akan dikeluarkan. 128 Diktat Kuliah Internet & Web Disain – Herman Tolle - UB Timeout Dengan timeout (atau timer) kita bisa memerintahkan komputer menjalankan kode setelah sekian waktu tertentu. Sebagain contoh, pada kode berikut ini jika tombol ditekan maka setelah 3 detik akan muncul window pop-up: <script language="JavaScript"> <!-- hide function timer() { setTimeout("alert('Time is up!')", 3000); } // --> </script> ... <form> <input type="button" value="Timer" onClick="timer()"> </form> method setTimeout() adalah method dari window-object yang mengeset waktu timeout. Argumen pertama adalah kode JavaScript yang akan dijalankan setelah suatu waktu tertentu. Pada contoh di atas argumennya adalah "alert('Time is up!')". Perhatikan bahwa kode JavaScript berada di dalam tanda petik dua (double quote). Argumen kedua menentukan berapa lama komputer harus mengunggu sebelum kode dijalankan. Besarnya adalah dalam satu per seribu detik (3000 millisecond = 3 detik). 129 Diktat Kuliah Internet & Web Disain – Herman Tolle - UB Scroller Dengan mengetahui bagaimana menulis ke statusbar dan bagaimana timeout bekerja sekarang kita coba membuat scrollers. Scroller merupakan text yang bergerak pada statusbar. Kita akan coba membuat program scroller dasar. Kita bisa mengembangkannya lebih lanjut jika diperlukan. Scrollers sebenarnya tidak terlalu sulit diimplementasikan, karena sebenarnya hanya menulisi text pada statusbar. Setelah sekian waktu yang tertentu kita tulisi lagi text yang sama tapi pada posisi yang sedikit lebih ke kiri. Lalu kita ulangi proses ini terus menerus sehingga kita mendapatkan efek seakan-akan text bergerak dari kanan ke kiri. Yang harus dipikirkan adalah menentukan bagian mana dari text yang harus ditampilkan karena keseluruhan text biasanya lebih panjang daripada statusbar. Ketikkan contoh berikut ini <html> <head> <script language="JavaScript"> <!-- hide // define the text of the scroller var scrtxt = "This is JavaScript! " + "This is JavaScript! " + "This is JavaScript!"; var length = scrtxt.length; var width = 100; var pos = -(width + 2); function scroll() { 130 Diktat Kuliah Internet & Web Disain – Herman Tolle - UB // display the text at the right position and set a timeout // move the position one step further pos++; // calculate the text which shall be displayed var scroller = ""; if (pos == length) { pos = -(width + 2); } // if the text hasn't reached the left side yet we have to // add some spaces - otherwise we have to cut of the first // part of the text (which moved already across the left border if (pos < 0) { for (var i = 1; i <= Math.abs(pos); i++) { scroller = scroller + " ";} scroller = scroller + scrtxt.substring(0, width - i + 1); } else { scroller = scroller + scrtxt.substring(pos, width + pos); } // assign the text to the statusbar window.status = scroller; // call this function again after 100 milliseconds setTimeout("scroll()", 100); } 131 Diktat Kuliah Internet & Web Disain – Herman Tolle - UB // --> </script> </head> <body onLoad="scroll()"> Your HTML-page goes here. </body> </html> Bagian utama dari function scroll() diperlukan untuk menghitung bagian mana dari text yang akan ditampilkan. Untuk memulai scroller kita gunakan event-handler onLoad dari tag <body>. Ini berarti function scroll() akan dipanggil setelah halaman HTML diload. Kita panggil function scroll() dengan properti onLoad. Langkah pertama scroller dihitung dan ditampikan. Pada akhir function scroll() kita tentukan timeout. Ini menyebabkan function scroll() dijalankan lagi setelah 100 millisecond. Text dipindahkan satu langkah kedepan dan timeout yang lain di-set lagi. Hal ini terjadi selamanya. (Ada beberapa masalah menjalankan scroller ini dengan Netscape Navigator 2.x. Kadang-kadang keluar error 'Out of memory'. Ini terjadi karena strings tidak bisa sebenarnya diubah dalam JavaScript. Jika kita coba melakukan hal ini JavaScript akan membuat object baru tanpa menghapus yang lama. Ini akan menyebabkan memory overflow.) 6.5 PREDEFINED OBJECT Date-object JavaScript telah menyediakan predefined objects yaitu object-object yang telah terdefinisi dan siap dipakai seperti Date-object, Arrayobject atau Math-object. Selengkapnya lihat pada referensi JavaScript. 132 Diktat Kuliah Internet & Web Disain – Herman Tolle - UB Pertama-tama mari kita lihat Date-object. Object ini menyediakan fasilitas penentuan tanggal dan waktu. Misalnya dengan gampang kita bisa menghitung berapa hari lagi hari lebaran sejak hari ini, atau kita juga bisa menampilkan jam pada halaman HTML. Mari kita mulai dengan menampilkan waktu. Kita harus membuat Date-object yang baru dengan menggunakan operator new. Lihat pada baris kode berikut: today= new Date() Kode ini akan membuat sebuah Date-object baru bernama today. Jika kita tidak menentukan hari dan waktu tertentu sebagai argumennya berarti tanggal dan waktu sekarang yang akan digunakan. Artinya setelah mengeksekusi today= new Date(), today akan mewakili tanggal dan waktu sekarang. Date-object menyediakan method yang bisa kita gunakan melalui object today. Method-mothod ini contohnya adalah getHours(), setHours(), getMinutes(), setMinutes(), getMonth(), setMonth() dan seterusnya (lihat pada dokumentasi Netscapes JavaScript). Perhatikan bahwa Date-object hanya mewakili tanggal dan waktu tertentu dan bukan seperti jam yang berubah setiap detik secara otomatis. Untuk memperoleh tanggal dan waktu yang lain selain tanggal sekarang, kita bisa menggunakan kode berikut ini: today= new Date(1997, 0, 1, 17, 35, 23) Ini akan membuat Date-object baru yang berisi tanggal 1 January 1997 pada jam 17:35 dan 23 detik. Jadi kita bisa menentukan tanggal dan hari dengan format berikut: Date(year, month, day, hours, minutes, seconds) 133 Diktat Kuliah Internet & Web Disain – Herman Tolle - UB Perhatikan bahwa kita menggunakan angka 0 untuk January. Angka 1 untuk February dan seterusnya. Sekarang kita akan membuat script yang mengeluarkan tanggal dan waktu sekarang dengan hasil seperti ini: Time: 10:8 Date: 1/24/1998 Baris kodenya adalah sebagai berikut: <script language="JavaScript"> <!-- hide now = new Date(); document.write("Time: " + now.getHours() + ":" + now.getMinutes()+"<br>"); document.write("Date: " + (now.getMonth() + 1) + "/" + now.getDate() + "/" + (1900 + now.getYear())); // --> </script> Di sini kita gunakan method-method seperti getHours() untuk menampilkan waktu dan tanggal yang terdapat pada Date-object now. Perhatikan bahwa kita menambahkan 1900 pada tahun, karena method getYear() mengeluarkan angka tahun sejak 1900. Artinya untuk tahun 1997 hasilnya akan berupa angka 97 dan jika tahun 2010 hasilnya akan 110 – bukan 10! Jika kita menambahkan 1900 kita tidak akan mendapatkan permasalahan utnuk tahun 2000-an. Perhatikan juga bahwa kita harus menambahkan satu pada angka yang diperoleh dari getMonth() karena alasan yang sama seperti 134 Diktat Kuliah Internet & Web Disain – Herman Tolle - UB sebelumnya. Script ini tidak mengecek apakah angka menit kurang dari 10 artinya kita mungkin akan meperoleh waktu dengan tampilan seperti ini: 14:3 yang sebenarnya adalah 14:03. Kita selesaikan masalah ini pada script berikutnya. Sekarang kita akan membuat script yang menampilkan sebuah jam yang benar-benar bekerja: Kodenya adalah sebagai berikut: <html> <head> <script Language="JavaScript"> <!-- hide var timeStr, dateStr; function clock() { now= new Date(); // time hours= now.getHours(); minutes= now.getMinutes(); seconds= now.getSeconds(); timeStr= "" + hours; timeStr+=((minutes < 10) ? ":0" : ":")+ minutes; timeStr+=((seconds < 10) ? ":0" : ":")+ seconds; document.clock.time.value = timeStr; // date 135 Diktat Kuliah Internet & Web Disain – Herman Tolle - UB date= now.getDate(); month= now.getMonth()+1; year= now.getYear(); dateStr= "" + month; dateStr+= ((date < 10) ? "/0" : "/") + date; dateStr+= "/" + year; document.clock.date.value = dateStr; Timer= setTimeout("clock()",1000); } // --> </script> </head> <body onLoad="clock()"> <form name="clock"> Time: <input type="text" name="time" size="8" value=""><br> Date: <input type="text" name="date" size="8" value=""> </form> </body> </html> Di sini kita menggunakan method setTimeout() untuk men-set waktu dan tanggal setiap detiknya, jadi kita harus membuat Dateobject baru setiap detik. Perhatikan bahwa kita memanggil function clock() pada event-handler onLoad di tag <body> . Pada bagian body halaman HTML kita memiliki dua text-element. Function clock() 136 Diktat Kuliah Internet & Web Disain – Herman Tolle - UB menulis waktu dan tanggal pada kedua text-element ini dengan format yang benar. Kita menggunkan dua string timeStr dan dateStr untuk keperluan ini. Permasalahan menit yang kurang dari 10 kita selesaikan pada script di atas melalui baris kode berikut: timeStr+= ((minutes < 10) ? ":0" : ":") + minutes; Di sini angka menit ditambahkan dengan string timeStr. Jika menit kurang dari 10 kita harus menambah angka 0. Kode di atas sebenarnya sama maksudnya dengan : if (minutes < 10) timeStr+= ":0" + minutes else timeStr+= ":" + minutes; Array-object Array merupakan suatu hal yang sangat penting diketahui. Misalkan kita ingin menyimpan 100 nama yang berbeda. Bagaimana melakukannya dengan JavaScript? Kita bisa saja mendefinisikan 100 variabel dan mengisinya dengan sederetan nama-nama. Cara ini cukup rumit dan tidak efisien. Array bisa dilihat sebagai banyak variabel yang disatukan. Kita bisa mengaksesnya melalui satu nama dan penomoran. Misalnya array kita berinama names. Maka kita dapat mengakses nama pertama melalui names[0], nama kedua dengan names[1] dan seterusnya. Setelah JavaScript 1.1 (Netscape Navigator 3.0) kita bisa menggunakan Array-object. Kita membuat array baru dengan perintah myArray = new Array(). Kita kemudian bisa mengisi harganya dengan: 137 Diktat Kuliah Internet & Web Disain – Herman Tolle - UB myArray[0]= 17; myArray[1]= "Stefan"; myArray[2]= "Koch"; Array JavaScript sangat flexible. Kita tidak harus menentukan ukuran array karena ukurannya akan ditentukan secara dinamis. Jika kita tulis myArray[99]= "xyz" ukuran array akan menjadi 100 elemen (array JavaScript hanya bisa bertambah bukan berkurang, jadi buat array sekecil mungkin.). Tidak jadi masalah apakah kita menyimpan angka, string atau object lain dalam array. Mari kita beranjak melihat contoh dibawah ini. Keluaran dari yang diinginkan adalah seperti: first element second element third element Baris kodenya adalah: <script language="JavaScript"> <!-- hide myArray= new Array(); myArray[0]= "first element"; myArray[1]= "second element"; myArray[2]= "third element"; for (var i= 0; i< 3; i++) { 138 Diktat Kuliah Internet & Web Disain – Herman Tolle - UB document.write(myArray[i] + "<br>"); } // --> </script> Pada kode di atas, pertama kali kita buat array dengan nama myArray. Lalu kita isi dengan tiga harga yang berbeda. Setelah itu kita mulai sebuah loop. Loop ini menjalankan perintah document.write(myArray[i]+"<br>"); sebanyak tiga kali. Variabel i menghitung dari 0 sampai 2 dengan for-loop. Kita lihat kita menggunakan myArray[i] di dalam for-loop. Karena i menghitung dari 0 sampai 2 kita memperoleh tiga kali pemanggilan document.write(). Kita bisa menulis loop di atas seperti ini: document.write(myArray[0] + "<br>"); document.write(myArray[1] + "<br>"); document.write(myArray[2] + "<br>"); Array dalam JavaScript 1.0 Array-object tidak terdapat di JavaScript 1.0 (Netscape Navigator 2.x dan Microsoft Internet Explorer 3.x), sehingga kita harus membuatnya secara manual seperti pada kode berikut ini yang terdapat pada Netscape documentation: function initArray() { this.length = initArray.arguments.length for (var i = 0; i < this.length; i++) this[i+1] = initArray.arguments[i] } 139 Diktat Kuliah Internet & Web Disain – Herman Tolle - UB bisa kita gunakan untuk membentuk array dengan perintah: myArray= new initArray(17, 3, 5); Tentunya array ini tidak akan memiliki method yang ada pada Array-object JavaScript 1.1. 6.6 FORM Validasi input form Form banyak sekali digunakan di Internet maupun intranet. Masukan form biasanya dikirimkan lagi ke server atau via mail ke email account tertentu. Bagaimana kita bisa memastikan bahwa data yang dimasukkan user valid atau tidak? Dengan bantuan JavaScript form input dapat dengan mudah di-cek sebelum dikirimkan lewat Internet. Pertama mari kita lihat contoh bagaimana input dari user divalidasi, lalu kita lihat bagaimana mengirimkan informasi melalui Internet. Mari kita buat script sederhana yang berupa halaman HTML yang berisi dua text-element. User harus memasukkan namanya pada textelement pertama dan e-mail address-nya pada elemen kedua. Sebagai contoh masukkan sembarang text pada input yang disediakan. Jika input tidak valid maka akan muncul window peringatan yang mengatakan bahwa input tidak valid. Berikut ini kira-kira tampilan contoh yang akan kita buat. 140 Diktat Kuliah Internet & Web Disain – Herman Tolle - UB Jika kita masukkan suatu text (misalnya Daniel) pada input-elemen pertama lalu menekan tombol "Test Input", akan muncul window popup yang memberitahu kita apakah input valid atau tidak. Jika kita tidak memasukkan apapun pada text-element lalu menekan tombol "Test Input", maka akan muncul window peringatan yang menyatakan bahwa kita harus memasukkan sesuatu: Pada text-element kedua, jika kita masukkan text yang tidak sesuai dengan format e-mail (ada tanda @) maka text dianggap tidak valid: 141 Diktat Kuliah Internet & Web Disain – Herman Tolle - UB Jika kita memasukkan input yang benar maka pesan valid akan muncul Bagaimana cara membuat halaman HTML yang demikian itu? Berikut ini adalah baris kodenya: <html> <head> <script language="JavaScript"> <!-- Hide function test1(form) { if (form.text1.value == "") alert("Please enter a string!") else { alert("Hi "+form.text1.value+"! Form input ok!"); } 142 Diktat Kuliah Internet & Web Disain – Herman Tolle - UB } function test2(form) { if (form.text2.value == "" || form.text2.value.indexOf('@', 0) == -1) alert("No valid e-mail address!"); else alert("OK!"); } // --> </script> </head> <body> <form name="first"> Enter your name:<br> <input type="text" name="text1"> <input type="button" name="button1" value="Test Input" onClick="test1(this.form)"> <P> Enter your e-mail address:<br> <input type="text" name="text2"> <input type="button" name="button2" value="Test Input" onClick="test2(this.form)"> </body> </html> Pertama perhatikan kode HTML pada bagian <body>. Kita membuat dua text-element dan dua tombol. Tombol akan memanggil function test1(...) atau test2(...) tergantung dari tombol mana yang ditekan. Kita melakukan passing this.form ke function untuk bisa menentukan elemen yang benar pada function-nya nanti. 143 Diktat Kuliah Internet & Web Disain – Herman Tolle - UB Function test1(form) melakukan tes apakah string kosong atau tidak. Ini dilakukan melalui if (form.text1.value == "")... . Variabel 'form' adalah variabel yang menerima harga 'this.form' pada pemanggilan function. Kita memperoleh harga dari elemen input dengan menggunakan 'value' dikombinasikan dengan form.text1. Untuk mengetahui apakah string kosong kita bandingkan dengan "". Jika input string sama dengan "" berarti user belum memasukkan sesuatu. User akan mendapatkan pesan error. Jika dimasukkan sesuatu, user akan mendapat pesan Ok. Permasalahannya adalah user mungkin saja memasukkan spasi kosong yang juga akan dianggap input yang valid! Script ini belum mengakomodasi hal tersebut, jadi masih harus dimodifikasi lagi. Sekarang lihat function test2(form). Function ini lagi-lagi membandingkan input string dengan string kosong "" untuk memastikan bahwa sesuatu telah diketikkan oleh user. Tetapi kita telah menambahkan baris tambahan pada perintah if. Tanda || disebut OR-operator. Kita telah mempelajarinya pada bagian 6. Perintah if ini megecek apakah salah satu di antara dua perbandingan bernilai benar (true). Jika minimal salah satu di antaranya true maka perintah if bernilai true dan perintah berikutnya akan dijalankan. Artinya kita akan mendapatkan pesan error jika string yang kita masukkan kosong atau tidak ada tanda @ di dalam string yang berada pada operasi kedua di dalam perintah if. Mengecek karakter khusus Kadang kita ingin membatasi input form dengan karakter atau angka khusus. Misalnya saja nomor telephone - input harus hanya terdiri dari angka (dengan asumsi nomor telephone tidak mengandung karakter). Kita dapat mengecek apakah yang dimasukkan user itu berupa angkat atau bukan. Kebanyakan orang menggunakan simbol yang berbeda-beda untuk nomor telephone-nya - seperti: 01234-56789, 01234/56789 atau 01234 56789 (dengan spasi di antaranya). User hendaknya tidak dilarang 144 Diktat Kuliah Internet & Web Disain – Herman Tolle - UB untuk memasukkan simbol yang dia ingini. Jadi kita harus mengubah script kita agar mampu mengecek angka dan beberapa simbol. Perhatikan contoh berikut ini: Jika kita masukkan angka-angka dan simbol-simbol "/", "-", dan " ", maka ketika kita tekan tombol check, akan keluar pesan OK. Namun jika kita masukkan sembarang karakter di samping karakterkarakter di atas, maka akan keluar pesan error: Berikut ini baris kode untuk mengimplementasikan contoh di atas. <html> <head> <script language="JavaScript"> <!-- hide function check(input) { var ok = true; 145 Diktat Kuliah Internet & Web Disain – Herman Tolle - UB for (var i = 0; i < input.length; i++) { var chr = input.charAt(i); var found = false; for (var j = 1; j < check.length; j++) { if (chr == check[j]) found = true; } if (!found) ok = false; } return ok; } function test(input) { if (!check(input, "1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "/", "-", " ")) { alert("Input not ok."); } else { alert("Input ok!"); } } // --> </script> </head> <body> <form> Telephone: <input type="text" name="telephone" value=""> 146 Diktat Kuliah Internet & Web Disain – Herman Tolle - UB <input type="button" value="Check" onClick="test(this.form.telephone.value)"> </form> </body> </html> Dengan gampang kita lihat bahwa function test() menentukan karakter-karakter yang dianggap valid. Mengirimkan masukan form Ada beberapa cara yang dapat dilakukan untuk mengirimkan input form. Cara yang paling sederhana adalah menggunakan e-mail. Cara ini yang akan kita pakai sebagai contoh. Jika input form ingin ditangani oleh server kita perlu menambahkan CGI (Common Gateway Interface) yang memungkinkan kita memproses form input secara otomatis. Server bisa berupa database yang menyimpan input dari pelanggan. Cara lain lagi menggunakan index-pages seperti Yahoo yang biasanya memiliki form search yang akan mencari data pada database. User akan mendapat respon yang cepat setelah menekan tombol submit karena prosesnya dilakukan server secara otomatis. JavaScript tidak bisa melakukan hal seperti ini. Kita juga tidak bisa membuat sistem guestbook dengan JavaScript karena JavaScript tidak bisa menulis file pada server. Tapi jika proses pengiriman data guestbook cukup menggunakan e-mail Javascript masih mampu menanganinya, tetapi kita harus melakukan feedback secara manual. Hal ini masih bisa ditolerir jika data yang diterima setiap hari masih sedikit. Contoh berikut ini sebenarnya merupakan HTML biasa, jadi JavaScript tidak diperlukan di sini! Hanya saja, jika kita hendak melakukan validasi input sebelum dikirim tentunya kita perlu JavaScript. Berikut ini contoh cara mengirimkan data form ke server melalui e-mail: 147 Diktat Kuliah Internet & Web Disain – Herman Tolle - UB <form method=post action="mailto:[email protected]" enctype="text/plain"> Do you like this page? <input name="choice" type="radio" value="1">Not at all.<br> <input name="choice" type="radio" value="2" CHECKED>Waste of time.<br> <input name="choice" type="radio" value="3">Worst site of the Net.<br> <input name="submit" type="submit" value="Send"> </form> Properti enctype="text/plain" digunakan untuk mengirim plain text tanda bagian yang ter-encode, yang akan memudahkan pembacaan mail nantinya. Jika kita hendak melakukan validasi sebelum dikirimkan, kita bisa menggunakan event-handler onSubmit. Kita harus meletakkan eventhandler ini dalam tag <form> seperti ini: function validate() { // check if input ok // ... if (inputOK) return true else return false; } ... <form ... onSubmit="return validate()"> 148 Diktat Kuliah Internet & Web Disain – Herman Tolle - UB ... Dengan kode itu, form tidak akan terkirim lewat Internet jika form input masih salah. Membuat focus form-elemen tertentu Dengan bantuan method focus() kita bisa membuat form sedikit lebih user-friendly. Kita bisa membuat elemen mana yang difokuskan pada saat pertama atau yang input-nya salah. Fokus itu artinya mengeset kursor pada form-elemen tertentu sehingga user tidak harus lagi meng-click elemen yang bersangkutan sebelum memasukkan sesuatu. Kita bisa melakukan hal ini dengan script yang sederhana berikut ini: function setfocus() { document.first.text1.focus(); } Script di atas akan mengeset focus ke text-elemen pertama pada script sebelumnya. Kita harus menentukan dengan lengkap nama form - dalam hal ini first - dan nama form element - text1. Jika hendak membuat focus pada element ini saat halaman di-load kita bisa menambahkan pada properti onLoad di tag <body> seperti ini: <body onLoad="setfocus()"> Lebih lanjut kita dapat melakukan hal sebagai berikut: function setfocus() { document.first.text1.focus(); document.first.text1.select(); } 149 Diktat Kuliah Internet & Web Disain – Herman Tolle - UB yang akan mengeset focus dan juga men-select input. 6.8 Image-object Image pada halaman web Sekarang kita akan melihat Image-object yang tersedia dalam JavaScript 1.1 (Netscape Navigator 3.0 ke atas). Dengan banutan Image-object kita bisa mengganti gambar pada image pada suatu halaman web, sehingga memungkinkan kita mambuat animasi, misalnya. Pertama mari kita lihat bagaimana image dalam halaman web dapat diakses melalui JavaScript. Semua image diwakili melalui array. Array ini disebut images yang merupakan properti dari documentobject. Setiap image dalam halaman web memiliki nomor. Image pertama bernomor 0, image kedua bernomor 1 dan seterusnya. Jadi kita bisa mengakses image pertama melalui document.images[0]. Setiap image dalam dokumen HTML dianggap sebagai sebuah Image-object. Image-object tentunya memiliki properti yang dapat diakses melalui JavaScript. Kita misalnya bisa berapa ukuran yang dimiliki image dengan properti width dan height. Jadi document.images[0].width akan memberi kita lebar (dalam pixel) image pertama dalam halaman web yang kita miliki. Jika kita memiliki banyak image dalam satu halaman akan sulit untuk menomori seluruh image yang ada. Dengan memberikan nama untuk setiap image akan jauh mempermudah hal ini. Jika kita menyatakan image dengan tag berikut <img src="img.gif" name="myImage" width=100 height=100> 150 Diktat Kuliah Internet & Web Disain – Herman Tolle - UB kita akan bisa mengaksesnya melalui document.myImage atau document.images["myImage"]. Me-loading image Berikut ini kita akan mencoba mengganti isi (file gambar) sebuah image pada web-page. Untuk ini kita akan menggunakan properti src. Properti src mewakili alamat dari file gambar yang ditampilkan. Dengan JavaScript 1.1 kita bisa mengisi alamat file gambar yang baru ke image yang telah di-load pada web-page. Hasilnya adalah gambar pada lokasi yang baru akan di-load. Gambar baru ini akan menggantikan gambar lama. Mari kita lihat contoh berikut ini: <img src="img1.gif" name="myImage" width=100 height=100> Image dengan file gambar img1.gif akan di-load dan bernama myImage. Baris kode berikut akan menggantikan gambar lama img1.gif dengan gambar baru img2.gif: document.myImage.src= "img2.src"; Gambar yang baru akan berukutan sama dengan gambar lama. Kita tidak bisa merubah ukuran tempat gambar ditampilkan. Preload image Salah satu kelemahan dari penggantian gambar seperti di atas adalah bahwa gambar akan di-load setelah kita mengisikan alamat baru pada properti src. Karena gambar itu tidak di-load terlebih dahulu, maka akan membutuhkan waktu yang lumayan lama untuk menampilkan gambar yang baru karena harus diambil dahulu melalui Internet. Apa yang dapat kita perbuat untuk memperbaiki hal ini? Solusinya adalah preloading image yaitu me-load gambar 151 Diktat Kuliah Internet & Web Disain – Herman Tolle - UB telebih dahulu sebelum ditampilkan. Untuk ini kita harus membuat Image-object tambahan. Lihat baris kode berikut ini: hiddenImg= new Image(); hiddenImg.src= "img3.gif"; Baris pertama membuat sebuah Image-Object dengan nama hiddenImg. Baris kedua mendefinisikan alamat gambar yang akan diwakili melalui object hiddenImg. Kita telah mencoba bahwa mengisi alamat baru pada attribute src akan membuat browser me-load file gambar dari alamat yang ditetapkan pada atribut src-nya. Jadi file gambar img2.gif akan di-load ketika baris kedua dieksekusi. Gambar akan tetap disimpan di memory (lebih tepatnya di cache) untuk digunakan kemudian. Untuk menampilkan gambar yang baru ini kita gunakan baris berikut: document.myImage.src= hiddenImg.src; Sekarang gambar diambil dari cache dan akan ditampilkan dengan jauh lebih cepat. Inilah yang disebut preloading image. Tentu saja browser harus terlebih dahulu menyelesaikan pengambilan gambar yang dimaksud. Jadi jika kita melakukan preloading banyak gambar, mungkin masih akan terdapat delay karena browser akan berusaha men-download seluruh gambar yang digunakan. Kita harus tetap memperhatikan kecepatan Internet. Mengganti image berdasarkan event Dengan JavaScript kita bisa membuat efek yang bagus dengan mengganti gambar sebagai reaksi dari event tertentu. Misalnya kita bisa mengganti gambar saat mousecursor digerakkan di atas suatu area. Coba ketikkan baris kode berikut ini: 152 Diktat Kuliah Internet & Web Disain – Herman Tolle - UB <a href="#" onMouseOver="document.myImage2.src='img2.gif'" onMouseOut="document.myImage2.src='img1.gif'"> <img src="img1.gif" name="myImage2" width=160 height=50 border=0></a> Kode sederhana di atas sudah menampakkan hasil yang kita inginkan, yaitu gambar akan berganti menjadi gambar lain jika kita gerakkan mouse di atas gambar (akibat baris onMouseOver="document.myImage2.src='img2.gif'"). Kemudian jika kita keluarkan mouse dari gambar tersebut, gambar akan berganti menjadi gambar awal (onMouseOut="document.myImage2.src='img1.gif'"). Namun kode di atas masih memiliki kekurangan seperti: • Browser yang digunakan tidak mengenal JavaScript 1.1. • Gambar kedua tidak di-preload. • Untuk setiap image kita harus menuliskan kode yang sama • Kita ingin memiliki script yang dapat digunakan untuk banyak halaman web berulang-ulang tanpa perlu banyak perubahan. Kita sekarang lihat script yang lengkap yang mengatasi permasalahan di atas. Script menjadi lebih panjang tapi kita cukup menuliskannya sekali saja. Ada dua hal yang diperlukan untuk membuat script ini fleksibel: • Jumlah image yang tak terbatas - tidak jadi masalah apakah itu 10 atau 100 images 153 Diktat Kuliah Internet & Web Disain – Herman Tolle - UB • Urutan image yang tak terbatas - memungkinkan mengubah urutan images tanpa merubah kode Berikut ini baris kode selengkapnya <html> <head> <script language="JavaScript"> <!-- hide // ok, we have a JavaScript browser var browserOK = false; var pics; // --> </script> <script language="JavaScript1.1"> <!-- hide // JavaScript 1.1 browser - oh yes! browserOK = true; pics = new Array(); // --> </script> <script language="JavaScript"> 154 Diktat Kuliah Internet & Web Disain – Herman Tolle - UB <!-- hide var objCount = 0; // number of (changing) images on web-page function preload(name, first, second) { // preload images and place them in an array if (browserOK) { pics[objCount] = new Array(3); pics[objCount][0] = new Image(); pics[objCount][0].src = first; pics[objCount][1] = new Image(); pics[objCount][1].src = second; pics[objCount][2] = name; objCount++; } } function on(name){ if (browserOK) { for (i = 0; i < objCount; i++) { if (document.images[pics[i][2]] != null) if (name != pics[i][2]) { // set back all other pictures document.images[pics[i][2]].src = pics[i][0].src; } else { // show the second image because cursor moves across this image 155 Diktat Kuliah Internet & Web Disain – Herman Tolle - UB document.images[pics[i][2]].src = pics[i][1].src; } } } } function off(){ if (browserOK) { for (i = 0; i < objCount; i++) { // set back all pictures if (document.images[pics[i][2]] != null) document.images[pics[i][2]].src = pics[i][0].src; } } } // preload images - you have to specify which images should be preloaded // and which Image-object on the wep-page they belong to (this is the // first argument). Change this part if you want to use different images // (of course you have to change the body part of the document as well) preload("link1", "img1f.gif", "img1t.gif"); preload("link2", "img2f.gif", "img2t.gif"); preload("link3", "img3f.gif", "img3t.gif"); // --> </script> 156 Diktat Kuliah Internet & Web Disain – Herman Tolle - UB <head> <body> <a href="link1.htm" onMouseOver="on('link1')" onMouseOut="off()"> <img name="link1" src="link1f.gif" width="140" height="50" border="0"></a> <a href="link2.htm" onMouseOver="on('link2')" onMouseOut="off()"> <img name="link2" src="link2f.gif" width="140" height="50" border="0"></a> <a href="link3.htm" onMouseOver="on('link3')" onMouseOut="off()"> <img name="link3" src="link3f.gif" width="140" height="50" border="0"></a> </body> </html> Script di atas meletakkan seluruh file gambar dalam array pics. Function preload() yang dipanggil di awal akan membuat array ini. Kita memanggil function preload() seperti berikut: preload("link1", "img1f.gif", "img1t.gif"); Artinya script akan me-load kedua file gambar img1f.gif dan img1t.gif. File gambar pertama adalah yang akan ditampilkan saat mouse cursor tidak berada di daerah image. Saat user menggerakkan mouse cursor melewati daerah image, file gambar kedua akan 157 Diktat Kuliah Internet & Web Disain – Herman Tolle - UB ditampilkan. Dengan argumen pertama "link1" pada pemanggilan function preload() kita tentukan kedua preloaded image itu milik Image-object yang mana. Jika kita lihat pada bagian <body> pada contoh, kita lihat ada image dengan nama img1. Kita gunakan nama dari image (bukan nomornya) untuk bisa mengubah urutan gambar tanpa merubah script-nya. Function on() dan off() dipanggil melalui event-handler onMouseOver dan onMouseOut. Karena image tidak bisa bereaksi oleh event onMouseOver dan MouseOut kita harus membuat link pada image. Kita lihat function on() men-set image lainnya. Ini diperlukan karena bisa saja terjadi bahwa beberapa images terlewati sekaligus (event MouseOut tidak terjadi ketika user menggerakkan cursor dari sebuah image langsung keluar window). 158 Diktat Kuliah Internet & Web Disain – Herman Tolle - UB DAFTAR PUSTAKA Anonymous, “Javascrip Tutorial”, http://www.javascriptsource.com, diakses Januari 2006. Anonymous, “Pioneers On The Net”, http://www.chick.net/wizards/ pioneers.html, diakses Januari 2006. Budd, Andy. ”CSS Mastery: Advanced Web Standards Solutions”, Februari 2006. Dave Taylor, “Creating Cool Web Sites with HTML, XHTML, and CSS”, Wiley Publishing, Inc, 2004 Martin, Dodge, “An Atlas of Cyberspaces- Historical Maps”, http:// www.cybergeography.org/atlas/historical.html, diakses Januari 2006. Shengili-Roberts, Keith.,”Core Cascading Style Sheet”, Prentice Hall, New Jersey, 2000. Tolle, Herman. “Diktat Kuliah Internet & Disain Web”. Teknik Elektro Universitas Brawijaya. 2004. Wibowo, Sugeng, “Modul Pelatihan Dasar Disain Web”. UPT Pusat komputer universitas brawijaya, 2003. 159