Formulir diperkenalkan secara singkat sebagai cara untuk mengirimkan informasi yang diberikan oleh pengguna melalui HTTP. Mereka dirancang untuk Web pra-JavaScript, dengan asumsi bahwa interaksi dengan server selalu terjadi dengan menavigasi ke halaman baru Show
Tetapi elemen mereka adalah bagian dari DOM seperti halaman lainnya, dan elemen DOM yang mewakili bidang formulir mendukung sejumlah properti dan peristiwa yang tidak ada pada elemen lain. Ini memungkinkan untuk memeriksa dan mengontrol bidang input tersebut dengan program JavaScript dan melakukan hal-hal seperti menambahkan fungsionalitas ke formulir tradisional atau menggunakan formulir dan bidang sebagai blok penyusun dalam aplikasi JavaScript BidangFormulir web terdiri dari sejumlah kolom input yang dikelompokkan dalam tag <select> <option>Pancakes</option> <option>Pudding</option> <option>Ice cream</option> </select>3. HTML memungkinkan sejumlah gaya bidang yang berbeda, mulai dari kotak centang aktif/nonaktif sederhana hingga menu tarik-turun dan bidang untuk input teks. Buku ini tidak akan mencoba untuk membahas secara komprehensif semua jenis bidang, tetapi kita akan mulai dengan gambaran kasar Banyak jenis bidang menggunakan tag <select> <option>Pancakes</option> <option>Pudding</option> <option>Ice cream</option> </select>4. Atribut <select> <option>Pancakes</option> <option>Pudding</option> <option>Ice cream</option> </select>5 tag ini digunakan untuk memilih gaya bidang. Ini adalah beberapa jenis <select> <option>Pancakes</option> <option>Pudding</option> <option>Ice cream</option> </select>_4 yang umum digunakan <select> <option>Pancakes</option> <option>Pudding</option> <option>Ice cream</option> </select>7Bidang teks baris tunggal <select> <option>Pancakes</option> <option>Pudding</option> <option>Ice cream</option> </select>8Sama seperti <select> <option>Pancakes</option> <option>Pudding</option> <option>Ice cream</option> </select>7 tetapi menyembunyikan teks yang diketik <input type="text"> <script> document.querySelector("input").focus(); console.log(document.activeElement.tagName); // → INPUT document.querySelector("input").blur(); console.log(document.activeElement.tagName); // → BODY </script>_0Sakelar hidup/mati <input type="text"> <script> document.querySelector("input").focus(); console.log(document.activeElement.tagName); // → INPUT document.querySelector("input").blur(); console.log(document.activeElement.tagName); // → BODY </script>1(Bagian dari) bidang pilihan ganda <input type="text"> <script> document.querySelector("input").focus(); console.log(document.activeElement.tagName); // → INPUT document.querySelector("input").blur(); console.log(document.activeElement.tagName); // → BODY </script>2Memungkinkan pengguna untuk memilih file dari komputer mereka Bidang formulir tidak harus muncul dalam tag <select> <option>Pancakes</option> <option>Pudding</option> <option>Ice cream</option> </select>3. Anda dapat menempatkannya di mana saja di halaman. Bidang seperti itu tidak dapat dikirimkan (hanya formulir secara keseluruhan yang dapat), tetapi ketika menanggapi masukan dengan JavaScript, kita sering kali tidak ingin mengirimkan bidang kita secara normal. <p><input type="text" value="abc"> (text)</p> <p><input type="password" value="abc"> (password)</p> <p><input type="checkbox" checked> (checkbox)</p> <p><input type="radio" value="A" name="choice"> <input type="radio" value="B" name="choice" checked> <input type="radio" value="C" name="choice"> (radio)</p> <p><input type="file"> (file)</p> Antarmuka JavaScript untuk elemen tersebut berbeda dengan jenis elemen. Kami akan membahasnya masing-masing nanti di bab ini Bidang teks multibaris memiliki tagnya sendiri, <input type="text"> <script> document.querySelector("input").focus(); console.log(document.activeElement.tagName); // → INPUT document.querySelector("input").blur(); console.log(document.activeElement.tagName); // → BODY </script>4, sebagian besar karena menggunakan atribut untuk menentukan nilai awal multibaris akan terasa canggung. <input type="text"> <script> document.querySelector("input").focus(); console.log(document.activeElement.tagName); // → INPUT document.querySelector("input").blur(); console.log(document.activeElement.tagName); // → BODY </script>_4 memerlukan tag penutup <input type="text"> <script> document.querySelector("input").focus(); console.log(document.activeElement.tagName); // → INPUT document.querySelector("input").blur(); console.log(document.activeElement.tagName); // → BODY </script>6 yang cocok dan menggunakan teks di antara keduanya, alih-alih menggunakan atribut <input type="text"> <script> document.querySelector("input").focus(); console.log(document.activeElement.tagName); // → INPUT document.querySelector("input").blur(); console.log(document.activeElement.tagName); // → BODY </script>7, sebagai teks awal <textarea> one two three </textarea> Terakhir, tag <input type="text"> <script> document.querySelector("input").focus(); console.log(document.activeElement.tagName); // → INPUT document.querySelector("input").blur(); console.log(document.activeElement.tagName); // → BODY </script>8 digunakan untuk membuat bidang yang memungkinkan pengguna memilih dari sejumlah opsi yang telah ditentukan sebelumnya <select> <option>Pancakes</option> <option>Pudding</option> <option>Ice cream</option> </select> Setiap kali nilai bidang formulir berubah, itu memicu peristiwa <input type="text"> <script> document.querySelector("input").focus(); console.log(document.activeElement.tagName); // → INPUT document.querySelector("input").blur(); console.log(document.activeElement.tagName); // → BODY </script>9 FokusTidak seperti kebanyakan elemen dalam dokumen HTML, bidang formulir bisa mendapatkan fokus keyboard. Saat diklik—atau diaktifkan dengan cara lain—mereka menjadi elemen aktif saat ini, penerima utama input keyboard Jika dokumen memiliki bidang teks, teks yang diketik akan berakhir di sana hanya bila bidang tersebut difokuskan. Bidang lain merespons aktivitas keyboard secara berbeda. Misalnya, menu <input type="text"> <script> document.querySelector("input").focus(); console.log(document.activeElement.tagName); // → INPUT document.querySelector("input").blur(); console.log(document.activeElement.tagName); // → BODY </script>_8 mencoba berpindah ke opsi yang berisi teks yang diketik pengguna dan merespons tombol panah dengan menggerakkan pilihannya ke atas dan ke bawah Kita dapat mengontrol fokus dari JavaScript dengan metode <input type="text" autofocus>1 dan <input type="text" autofocus>2. Yang pertama memindahkan fokus ke elemen DOM yang dipanggil, dan yang kedua menghilangkan fokus. Nilai dalam <input type="text" autofocus>_3 sesuai dengan elemen yang saat ini difokuskan <input type="text"> <script> document.querySelector("input").focus(); console.log(document.activeElement.tagName); // → INPUT document.querySelector("input").blur(); console.log(document.activeElement.tagName); // → BODY </script> Untuk beberapa halaman, pengguna diharapkan ingin segera berinteraksi dengan bidang formulir. JavaScript dapat digunakan untuk memfokuskan bidang ini saat dokumen dimuat, tetapi HTML juga menyediakan atribut <input type="text" autofocus>4, yang menghasilkan efek yang sama tetapi memberi tahu browser apa yang ingin kita capai. Ini memungkinkan browser untuk menonaktifkan perilaku saat tidak sesuai, seperti saat pengguna memfokuskan sesuatu yang lain <input type="text" autofocus> Browser secara tradisional juga memungkinkan pengguna untuk memindahkan fokus melalui dokumen dengan menekan tombol Tab. Kita dapat memengaruhi urutan di mana elemen menerima fokus dengan atribut <input type="text" autofocus>5. Dokumen contoh berikut akan membiarkan fokus melompat dari input teks ke tombol OK, daripada melalui tautan bantuan terlebih dahulu <input type="text" tabindex=1> <a href=".">(help)</a> <button onclick="console.log('ok')" tabindex=2>OK</button> Secara default, sebagian besar jenis elemen HTML tidak dapat difokuskan. Namun Anda dapat menambahkan atribut <input type="text" autofocus>_5 ke elemen apa pun, yang akan membuatnya dapat difokuskan Bidang yang dinonaktifkanSemua bidang formulir dapat dinonaktifkan melalui atribut <input type="text" autofocus>7 mereka, yang juga ada sebagai properti pada objek DOM elemen <button>I'm all right</button> <button disabled>I'm out</button> Bidang yang dinonaktifkan tidak dapat difokuskan atau diubah, dan tidak seperti bidang yang aktif, bidang tersebut biasanya terlihat abu-abu dan pudar Ketika sebuah program sedang dalam proses penanganan tindakan yang disebabkan oleh beberapa tombol atau kontrol lain, yang mungkin memerlukan komunikasi dengan server dan dengan demikian memerlukan waktu, sebaiknya nonaktifkan kontrol hingga tindakan selesai. Dengan begitu, saat pengguna menjadi tidak sabar dan mengkliknya lagi, mereka tidak akan mengulangi tindakannya secara tidak sengaja Bentuk secara keseluruhanSaat sebuah bidang dimuat dalam elemen <select> <option>Pancakes</option> <option>Pudding</option> <option>Ice cream</option> </select>3, elemen DOM-nya akan memiliki properti <input type="text" autofocus>9 yang menautkan kembali ke elemen DOM formulir. Elemen <select> <option>Pancakes</option> <option>Pudding</option> <option>Ice cream</option> </select>3, pada gilirannya, memiliki properti yang disebut <input type="text" tabindex=1> <a href=".">(help)</a> <button onclick="console.log('ok')" tabindex=2>OK</button>1 yang berisi kumpulan bidang seperti array di dalamnya Atribut <input type="text" tabindex=1> <a href=".">(help)</a> <button onclick="console.log('ok')" tabindex=2>OK</button>_2 bidang formulir menentukan cara nilainya akan diidentifikasi saat formulir dikirimkan. Itu juga dapat digunakan sebagai nama properti saat mengakses properti <input type="text" tabindex=1> <a href=".">(help)</a> <button onclick="console.log('ok')" tabindex=2>OK</button>1 formulir, yang berfungsi baik sebagai objek seperti array (dapat diakses dengan nomor) dan peta (dapat diakses dengan nama) <form action="example/submit.html"> Name: <input type="text" name="name"><br> Password: <input type="password" name="password"><br> <button type="submit">Log in</button> </form> <script> var form = document.querySelector("form"); console.log(form.elements[1].type); // → password console.log(form.elements.password.type); // → password console.log(form.elements.name.form == form); // → true </script> Sebuah tombol dengan atribut <select> <option>Pancakes</option> <option>Pudding</option> <option>Ice cream</option> </select>5 dari <input type="text" tabindex=1> <a href=".">(help)</a> <button onclick="console.log('ok')" tabindex=2>OK</button>5 akan, ketika ditekan, menyebabkan formulir dikirimkan. Menekan Enter saat bidang formulir difokuskan memiliki efek yang sama Mengirimkan formulir biasanya berarti browser menavigasi ke halaman yang ditunjukkan oleh atribut <input type="text" tabindex=1> <a href=".">(help)</a> <button onclick="console.log('ok')" tabindex=2>OK</button>6 formulir, menggunakan permintaan <input type="text" tabindex=1> <a href=".">(help)</a> <button onclick="console.log('ok')" tabindex=2>OK</button>7 atau <input type="text" tabindex=1> <a href=".">(help)</a> <button onclick="console.log('ok')" tabindex=2>OK</button>8. Namun sebelum itu terjadi, peristiwa <input type="text" tabindex=1> <a href=".">(help)</a> <button onclick="console.log('ok')" tabindex=2>OK</button>_9 dipicu. Acara ini dapat ditangani oleh JavaScript, dan penangan dapat mencegah perilaku default dengan memanggil <button>I'm all right</button> <button disabled>I'm out</button>0 pada objek acara <form action="example/submit.html"> Value: <input type="text" name="value"> <button type="submit">Save</button> </form> <script> var form = document.querySelector("form"); form.addEventListener("submit", function(event) { console.log("Saving value", form.elements.value.value); event.preventDefault(); }); </script> Mencegat <input type="text" tabindex=1> <a href=".">(help)</a> <button onclick="console.log('ok')" tabindex=2>OK</button>9 acara di JavaScript memiliki berbagai kegunaan. Kami dapat menulis kode untuk memverifikasi bahwa nilai yang dimasukkan pengguna masuk akal dan segera menampilkan pesan kesalahan alih-alih mengirimkan formulir saat tidak. Atau kita dapat menonaktifkan cara biasa mengirimkan formulir seluruhnya, seperti pada contoh sebelumnya, dan meminta program kita menangani input, kemungkinan menggunakan <button>I'm all right</button> <button disabled>I'm out</button>2 untuk mengirimkannya ke server tanpa memuat ulang halaman Bidang teksBidang yang dibuat oleh <select> <option>Pancakes</option> <option>Pudding</option> <option>Ice cream</option> </select>4 tag dengan jenis <select> <option>Pancakes</option> <option>Pudding</option> <option>Ice cream</option> </select>7 atau <select> <option>Pancakes</option> <option>Pudding</option> <option>Ice cream</option> </select>8, serta <button>I'm all right</button> <button disabled>I'm out</button>6 tag, berbagi antarmuka umum. Elemen DOM mereka memiliki properti <input type="text"> <script> document.querySelector("input").focus(); console.log(document.activeElement.tagName); // → INPUT document.querySelector("input").blur(); console.log(document.activeElement.tagName); // → BODY </script>_7 yang menyimpan konten mereka saat ini sebagai nilai string. Menyetel properti ini ke string lain akan mengubah konten bidang Properti <button>I'm all right</button> <button disabled>I'm out</button>_8 dan <button>I'm all right</button> <button disabled>I'm out</button>9 bidang teks memberi kita informasi tentang kursor dan pemilihan dalam teks. Saat tidak ada yang dipilih, kedua properti ini memiliki angka yang sama, yang menunjukkan posisi kursor. Misalnya, 0 menunjukkan awal teks, dan 10 menunjukkan kursor setelah karakter ke-10. Saat bagian dari bidang dipilih, kedua properti akan berbeda, memberi kita awal dan akhir dari teks yang dipilih. Seperti <input type="text"> <script> document.querySelector("input").focus(); console.log(document.activeElement.tagName); // → INPUT document.querySelector("input").blur(); console.log(document.activeElement.tagName); // → BODY </script>_7, properti ini juga dapat ditulis ke Sebagai contoh, bayangkan Anda sedang menulis artikel tentang Khasekhemwy tetapi kesulitan mengeja namanya. Kode berikut menyambungkan tag <input type="text"> <script> document.querySelector("input").focus(); console.log(document.activeElement.tagName); // → INPUT document.querySelector("input").blur(); console.log(document.activeElement.tagName); // → BODY </script>_4 dengan event handler yang, saat Anda menekan F2, menyisipkan string "Khasekhemwy" untuk Anda <textarea></textarea> <script> var textarea = document.querySelector("textarea"); textarea.addEventListener("keydown", function(event) { // The key code for F2 happens to be 113 if (event.keyCode == 113) { replaceSelection(textarea, "Khasekhemwy"); event.preventDefault(); } }); function replaceSelection(field, word) { var from = field.selectionStart, to = field.selectionEnd; field.value = field.value.slice(0, from) + word + field.value.slice(to); // Put the cursor after the word field.selectionStart = field.selectionEnd = from + word.length; } </script> Fungsi <form action="example/submit.html"> Name: <input type="text" name="name"><br> Password: <input type="password" name="password"><br> <button type="submit">Log in</button> </form> <script> var form = document.querySelector("form"); console.log(form.elements[1].type); // → password console.log(form.elements.password.type); // → password console.log(form.elements.name.form == form); // → true </script>_2 menggantikan bagian yang dipilih saat ini dari konten bidang teks dengan kata yang diberikan, lalu memindahkan kursor setelah kata tersebut sehingga pengguna dapat terus mengetik Acara <input type="text"> <script> document.querySelector("input").focus(); console.log(document.activeElement.tagName); // → INPUT document.querySelector("input").blur(); console.log(document.activeElement.tagName); // → BODY </script>_9 untuk bidang teks tidak diaktifkan setiap kali ada sesuatu yang diketik. Sebaliknya, itu menyala ketika bidang kehilangan fokus setelah kontennya diubah. Untuk segera menanggapi perubahan dalam bidang teks, Anda harus mendaftarkan penangan untuk peristiwa <form action="example/submit.html"> Name: <input type="text" name="name"><br> Password: <input type="password" name="password"><br> <button type="submit">Log in</button> </form> <script> var form = document.querySelector("form"); console.log(form.elements[1].type); // → password console.log(form.elements.password.type); // → password console.log(form.elements.name.form == form); // → true </script>4 sebagai gantinya, yang aktif setiap kali pengguna mengetik karakter, menghapus teks, atau memanipulasi konten bidang Contoh berikut menampilkan bidang teks dan penghitung yang menunjukkan panjang teks yang dimasukkan saat ini <textarea> one two three </textarea>_0 Kotak centang dan tombol radioBidang kotak centang adalah toggle biner sederhana. Nilainya dapat diekstraksi atau diubah melalui properti <form action="example/submit.html"> Name: <input type="text" name="name"><br> Password: <input type="password" name="password"><br> <button type="submit">Log in</button> </form> <script> var form = document.querySelector("form"); console.log(form.elements[1].type); // → password console.log(form.elements.password.type); // → password console.log(form.elements.name.form == form); // → true </script>5, yang memegang nilai Boolean <textarea> one two three </textarea>_1 Tag <form action="example/submit.html"> Name: <input type="text" name="name"><br> Password: <input type="password" name="password"><br> <button type="submit">Log in</button> </form> <script> var form = document.querySelector("form"); console.log(form.elements[1].type); // → password console.log(form.elements.password.type); // → password console.log(form.elements.name.form == form); // → true </script>6 digunakan untuk mengaitkan sepotong teks dengan kolom input. Atribut <form action="example/submit.html"> Name: <input type="text" name="name"><br> Password: <input type="password" name="password"><br> <button type="submit">Log in</button> </form> <script> var form = document.querySelector("form"); console.log(form.elements[1].type); // → password console.log(form.elements.password.type); // → password console.log(form.elements.name.form == form); // → true </script>_7 harus merujuk ke <form action="example/submit.html"> Name: <input type="text" name="name"><br> Password: <input type="password" name="password"><br> <button type="submit">Log in</button> </form> <script> var form = document.querySelector("form"); console.log(form.elements[1].type); // → password console.log(form.elements.password.type); // → password console.log(form.elements.name.form == form); // → true </script>8 dari bidang. Mengklik label akan mengaktifkan bidang, yang memfokuskannya dan mengubah nilainya saat itu adalah kotak centang atau tombol radio Tombol radio mirip dengan kotak centang, tetapi secara implisit ditautkan ke tombol radio lain dengan atribut <input type="text" tabindex=1> <a href=".">(help)</a> <button onclick="console.log('ok')" tabindex=2>OK</button>2 yang sama sehingga hanya satu dari tombol tersebut yang dapat aktif kapan saja <textarea> one two three </textarea>_2 Metode <form action="example/submit.html"> Value: <input type="text" name="value"> <button type="submit">Save</button> </form> <script> var form = document.querySelector("form"); form.addEventListener("submit", function(event) { console.log("Saving value", form.elements.value.value); event.preventDefault(); }); </script>_0 memberi kita semua elemen dengan atribut <input type="text" tabindex=1> <a href=".">(help)</a> <button onclick="console.log('ok')" tabindex=2>OK</button>2 yang diberikan. Contoh loop di atasnya (dengan loop <form action="example/submit.html"> Name: <input type="text" name="name"><br> Password: <input type="password" name="password"><br> <button type="submit">Log in</button> </form> <script> var form = document.querySelector("form"); console.log(form.elements[1].type); // → password console.log(form.elements.password.type); // → password console.log(form.elements.name.form == form); // → true </script>7 reguler, bukan <form action="example/submit.html"> Value: <input type="text" name="value"> <button type="submit">Save</button> </form> <script> var form = document.querySelector("form"); form.addEventListener("submit", function(event) { console.log("Saving value", form.elements.value.value); event.preventDefault(); }); </script>3, karena koleksi yang dikembalikan bukan array nyata) dan mendaftarkan event handler untuk setiap elemen. Ingatlah bahwa objek acara memiliki properti <form action="example/submit.html"> Value: <input type="text" name="value"> <button type="submit">Save</button> </form> <script> var form = document.querySelector("form"); form.addEventListener("submit", function(event) { console.log("Saving value", form.elements.value.value); event.preventDefault(); }); </script>_4 yang mengacu pada elemen yang memicu acara tersebut. Ini sering berguna dalam penangan acara seperti ini, yang akan dipanggil pada elemen yang berbeda dan memerlukan beberapa cara untuk mengakses target saat ini Pilih bidangPilih bidang secara konseptual mirip dengan tombol radio—mereka juga memungkinkan pengguna untuk memilih dari serangkaian opsi. Namun jika tombol radio menempatkan tata letak opsi di bawah kendali kami, tampilan tag <input type="text"> <script> document.querySelector("input").focus(); console.log(document.activeElement.tagName); // → INPUT document.querySelector("input").blur(); console.log(document.activeElement.tagName); // → BODY </script>8 ditentukan oleh browser Bidang pilih juga memiliki varian yang lebih mirip dengan daftar kotak centang, daripada kotak radio. Saat diberi atribut <form action="example/submit.html"> Value: <input type="text" name="value"> <button type="submit">Save</button> </form> <script> var form = document.querySelector("form"); form.addEventListener("submit", function(event) { console.log("Saving value", form.elements.value.value); event.preventDefault(); }); </script>6, tag <input type="text"> <script> document.querySelector("input").focus(); console.log(document.activeElement.tagName); // → INPUT document.querySelector("input").blur(); console.log(document.activeElement.tagName); // → BODY </script>8 akan memungkinkan pengguna untuk memilih sejumlah opsi, bukan hanya satu opsi <textarea> one two three </textarea>_3 Ini akan, di sebagian besar browser, tampil berbeda dari bidang pilih non- <form action="example/submit.html"> Value: <input type="text" name="value"> <button type="submit">Save</button> </form> <script> var form = document.querySelector("form"); form.addEventListener("submit", function(event) { console.log("Saving value", form.elements.value.value); event.preventDefault(); }); </script>6, yang umumnya digambar sebagai kontrol tarik-turun yang menampilkan opsi hanya saat Anda membukanya Atribut <form action="example/submit.html"> Value: <input type="text" name="value"> <button type="submit">Save</button> </form> <script> var form = document.querySelector("form"); form.addEventListener("submit", function(event) { console.log("Saving value", form.elements.value.value); event.preventDefault(); }); </script>_9 ke tag <input type="text"> <script> document.querySelector("input").focus(); console.log(document.activeElement.tagName); // → INPUT document.querySelector("input").blur(); console.log(document.activeElement.tagName); // → BODY </script>8 digunakan untuk mengatur jumlah opsi yang terlihat pada saat yang sama, yang memberi Anda kontrol eksplisit atas tampilan drop-down. Misalnya, menyetel atribut <form action="example/submit.html"> Value: <input type="text" name="value"> <button type="submit">Save</button> </form> <script> var form = document.querySelector("form"); form.addEventListener("submit", function(event) { console.log("Saving value", form.elements.value.value); event.preventDefault(); }); </script>_9 ke <textarea></textarea> <script> var textarea = document.querySelector("textarea"); textarea.addEventListener("keydown", function(event) { // The key code for F2 happens to be 113 if (event.keyCode == 113) { replaceSelection(textarea, "Khasekhemwy"); event.preventDefault(); } }); function replaceSelection(field, word) { var from = field.selectionStart, to = field.selectionEnd; field.value = field.value.slice(0, from) + word + field.value.slice(to); // Put the cursor after the word field.selectionStart = field.selectionEnd = from + word.length; } </script>2 akan membuat bidang menampilkan tiga baris, apakah opsi <form action="example/submit.html"> Value: <input type="text" name="value"> <button type="submit">Save</button> </form> <script> var form = document.querySelector("form"); form.addEventListener("submit", function(event) { console.log("Saving value", form.elements.value.value); event.preventDefault(); }); </script>6 diaktifkan atau tidak Setiap <textarea></textarea> <script> var textarea = document.querySelector("textarea"); textarea.addEventListener("keydown", function(event) { // The key code for F2 happens to be 113 if (event.keyCode == 113) { replaceSelection(textarea, "Khasekhemwy"); event.preventDefault(); } }); function replaceSelection(field, word) { var from = field.selectionStart, to = field.selectionEnd; field.value = field.value.slice(0, from) + word + field.value.slice(to); // Put the cursor after the word field.selectionStart = field.selectionEnd = from + word.length; } </script>_4 tag memiliki nilai. Nilai ini dapat ditentukan dengan atribut <input type="text"> <script> document.querySelector("input").focus(); console.log(document.activeElement.tagName); // → INPUT document.querySelector("input").blur(); console.log(document.activeElement.tagName); // → BODY </script>7, tetapi jika tidak diberikan, teks di dalam opsi akan dihitung sebagai nilai opsi. Properti <input type="text"> <script> document.querySelector("input").focus(); console.log(document.activeElement.tagName); // → INPUT document.querySelector("input").blur(); console.log(document.activeElement.tagName); // → BODY </script>_7 dari elemen <input type="text"> <script> document.querySelector("input").focus(); console.log(document.activeElement.tagName); // → INPUT document.querySelector("input").blur(); console.log(document.activeElement.tagName); // → BODY </script>8 mencerminkan opsi yang saat ini dipilih. Untuk bidang <form action="example/submit.html"> Value: <input type="text" name="value"> <button type="submit">Save</button> </form> <script> var form = document.querySelector("form"); form.addEventListener("submit", function(event) { console.log("Saving value", form.elements.value.value); event.preventDefault(); }); </script>6, properti ini tidak berarti banyak karena hanya akan memberikan nilai dari salah satu opsi yang dipilih saat ini Tag <textarea></textarea> <script> var textarea = document.querySelector("textarea"); textarea.addEventListener("keydown", function(event) { // The key code for F2 happens to be 113 if (event.keyCode == 113) { replaceSelection(textarea, "Khasekhemwy"); event.preventDefault(); } }); function replaceSelection(field, word) { var from = field.selectionStart, to = field.selectionEnd; field.value = field.value.slice(0, from) + word + field.value.slice(to); // Put the cursor after the word field.selectionStart = field.selectionEnd = from + word.length; } </script>_4 untuk bidang <input type="text"> <script> document.querySelector("input").focus(); console.log(document.activeElement.tagName); // → INPUT document.querySelector("input").blur(); console.log(document.activeElement.tagName); // → BODY </script>8 dapat diakses sebagai objek seperti array melalui properti <textarea> one two three </textarea>01 bidang. Setiap opsi memiliki properti yang disebut <textarea> one two three </textarea>_02, yang menunjukkan apakah opsi tersebut sedang dipilih. Properti juga dapat ditulis untuk memilih atau membatalkan pilihan Contoh berikut mengekstrak nilai yang dipilih dari bidang pilih <form action="example/submit.html"> Value: <input type="text" name="value"> <button type="submit">Save</button> </form> <script> var form = document.querySelector("form"); form.addEventListener("submit", function(event) { console.log("Saving value", form.elements.value.value); event.preventDefault(); }); </script>6 dan menggunakannya untuk menyusun bilangan biner dari masing-masing bit. Tahan Ctrl (atau Command di Mac) untuk memilih beberapa opsi <textarea> one two three </textarea>_4 Bidang fileBidang file awalnya dirancang sebagai cara untuk mengunggah file dari mesin browser melalui formulir. Di browser modern, mereka juga menyediakan cara untuk membaca file semacam itu dari program JavaScript. Lapangan bertindak sebagai penjaga gerbang. Skrip tidak bisa begitu saja mulai membaca file pribadi dari komputer pengguna, tetapi jika pengguna memilih file di bidang seperti itu, browser menafsirkan tindakan itu berarti bahwa skrip dapat membaca file tersebut. Bidang file biasanya terlihat seperti tombol berlabel sesuatu seperti "pilih file" atau "jelajahi", dengan informasi tentang file yang dipilih di sebelahnya <textarea> one two three </textarea>_5 Properti <textarea> one two three </textarea>_04 dari elemen bidang file adalah objek mirip-array (sekali lagi, bukan larik nyata) yang berisi file yang dipilih di bidang. Ini awalnya kosong. Alasan mengapa tidak ada properti <input type="text"> <script> document.querySelector("input").focus(); console.log(document.activeElement.tagName); // → INPUT document.querySelector("input").blur(); console.log(document.activeElement.tagName); // → BODY </script>_2 adalah karena bidang file juga mendukung atribut <form action="example/submit.html"> Value: <input type="text" name="value"> <button type="submit">Save</button> </form> <script> var form = document.querySelector("form"); form.addEventListener("submit", function(event) { console.log("Saving value", form.elements.value.value); event.preventDefault(); }); </script>6, yang memungkinkan untuk memilih beberapa file sekaligus Objek dalam properti <textarea> one two three </textarea>_04 memiliki properti seperti <input type="text" tabindex=1> <a href=".">(help)</a> <button onclick="console.log('ok')" tabindex=2>OK</button>2 (nama file), <form action="example/submit.html"> Value: <input type="text" name="value"> <button type="submit">Save</button> </form> <script> var form = document.querySelector("form"); form.addEventListener("submit", function(event) { console.log("Saving value", form.elements.value.value); event.preventDefault(); }); </script>9 (ukuran file dalam byte), dan <select> <option>Pancakes</option> <option>Pudding</option> <option>Ice cream</option> </select>5 (jenis media file, seperti <textarea> one two three </textarea>11 atau <textarea> one two three </textarea>12) Yang tidak dimilikinya adalah properti yang berisi konten file. Mendapatkan itu sedikit lebih terlibat. Karena membaca file dari disk dapat memakan waktu, antarmuka harus asinkron untuk menghindari pembekuan dokumen. Anda dapat menganggap konstruktor <textarea> one two three </textarea>13 mirip dengan <button>I'm all right</button> <button disabled>I'm out</button>2 tetapi untuk file <textarea> one two three </textarea>_6 Membaca file dilakukan dengan membuat objek <textarea> one two three </textarea>_13, mendaftarkan event handler <textarea> one two three </textarea>16 untuknya, dan memanggil metode <textarea> one two three </textarea>17, memberikannya file yang ingin kita baca. Setelah pemuatan selesai, properti <textarea> one two three </textarea>18 pembaca berisi konten file Contoh ini menggunakan <textarea> one two three </textarea>19 untuk mengulang array karena dalam loop normal akan terasa canggung untuk mendapatkan objek <input type="text"> <script> document.querySelector("input").focus(); console.log(document.activeElement.tagName); // → INPUT document.querySelector("input").blur(); console.log(document.activeElement.tagName); // → BODY </script>2 dan <textarea> one two three </textarea>21 yang benar dari event handler. Variabel akan dibagi oleh semua iterasi dari loop <textarea> one two three </textarea>_13s juga memicu peristiwa <textarea> one two three </textarea>23 saat membaca file gagal karena alasan apa pun. Objek kesalahan itu sendiri akan berakhir di properti <textarea> one two three </textarea>24 pembaca. Jika Anda tidak ingin mengingat detail antarmuka asinkron lain yang tidak konsisten, Anda dapat membungkusnya dalam <textarea> one two three </textarea>25 (lihat ) seperti ini <textarea> one two three </textarea>_7 Dimungkinkan untuk membaca hanya sebagian dari file dengan memanggil <textarea> one two three </textarea>26 di atasnya dan meneruskan hasilnya (yang disebut objek blob) ke pembaca file Menyimpan data sisi klienHalaman HTML sederhana dengan sedikit JavaScript dapat menjadi media yang bagus untuk “aplikasi mini”—program pembantu kecil yang mengotomatiskan hal-hal sehari-hari. Dengan menghubungkan beberapa bidang formulir dengan penangan acara, Anda dapat melakukan apa saja mulai dari mengonversi antara derajat Celcius dan Fahrenheit hingga menghitung kata sandi dari kata sandi utama dan nama situs web Ketika aplikasi semacam itu perlu mengingat sesuatu di antara sesi, Anda tidak dapat menggunakan variabel JavaScript karena variabel tersebut dibuang setiap kali halaman ditutup. Anda dapat menyiapkan server, menyambungkannya ke Internet, dan membuat aplikasi Anda menyimpan sesuatu di sana. Kita akan melihat bagaimana melakukannya di. Tetapi ini menambah banyak pekerjaan dan kerumitan ekstra. Terkadang cukup menyimpan data di browser saja. Tapi bagaimana caranya? Anda dapat menyimpan data string dengan cara yang bertahan dari pemuatan ulang halaman dengan meletakkannya di objek <textarea> one two three </textarea>27. Objek ini memungkinkan Anda untuk mengarsipkan nilai string di bawah nama (juga string), seperti dalam contoh ini <textarea> one two three </textarea>_8 Nilai di <textarea> one two three </textarea>_27 bertahan sampai ditimpa, dihapus dengan <textarea> one two three </textarea>29, atau pengguna menghapus data lokal mereka Situs dari domain yang berbeda mendapatkan kompartemen penyimpanan yang berbeda. Itu berarti data yang disimpan di <textarea> one two three </textarea>_27 oleh situs web tertentu, pada prinsipnya, hanya dapat dibaca (dan ditimpa) oleh skrip di situs yang sama Peramban juga memberlakukan batasan ukuran data yang dapat disimpan situs di <textarea> one two three </textarea>27, biasanya dalam urutan beberapa megabita. Pembatasan itu, bersama dengan fakta bahwa mengisi hard drive orang dengan sampah tidak terlalu menguntungkan, mencegah fitur ini menghabiskan terlalu banyak ruang Kode berikut mengimplementasikan aplikasi pencatat sederhana. Itu membuat catatan pengguna sebagai objek, mengaitkan judul catatan dengan string konten. Objek ini dikodekan sebagai JSON dan disimpan di <textarea> one two three </textarea>27. Pengguna dapat memilih catatan dari bidang <input type="text"> <script> document.querySelector("input").focus(); console.log(document.activeElement.tagName); // → INPUT document.querySelector("input").blur(); console.log(document.activeElement.tagName); // → BODY </script>_8 dan mengubah teks catatan itu menjadi <input type="text"> <script> document.querySelector("input").focus(); console.log(document.activeElement.tagName); // → INPUT document.querySelector("input").blur(); console.log(document.activeElement.tagName); // → BODY </script>4. Catatan dapat ditambahkan dengan mengklik tombol <textarea> one two three </textarea>_9 Skrip menginisialisasi variabel <textarea> one two three </textarea>_35 ke nilai yang disimpan di <textarea> one two three </textarea>27 atau, jika tidak ada, ke objek sederhana dengan hanya catatan <textarea> one two three </textarea>37 kosong di dalamnya. Membaca bidang yang tidak ada dari <textarea> one two three </textarea>_27 akan menghasilkan <textarea> one two three </textarea>39. Melewati <textarea> one two three </textarea>_39 ke <textarea> one two three </textarea>41 akan membuatnya mengurai string <textarea> one two three </textarea>42 dan mengembalikan <textarea> one two three </textarea>39. Dengan demikian, operator <textarea> one two three </textarea>_44 dapat digunakan untuk memberikan nilai default dalam situasi seperti ini Setiap kali data catatan berubah (ketika catatan baru ditambahkan atau catatan yang ada diubah), fungsi <textarea> one two three </textarea>45 dipanggil untuk memperbarui bidang penyimpanan. Jika aplikasi ini dimaksudkan untuk menangani ribuan catatan, bukan segelintir, ini akan menjadi terlalu mahal, dan kami harus menemukan cara yang lebih rumit untuk menyimpannya, seperti memberi masing-masing catatan tempat penyimpanannya sendiri. Saat pengguna menambahkan catatan baru, kode harus memperbarui bidang teks secara eksplisit, meskipun bidang <input type="text"> <script> document.querySelector("input").focus(); console.log(document.activeElement.tagName); // → INPUT document.querySelector("input").blur(); console.log(document.activeElement.tagName); // → BODY </script>8 memiliki penangan <input type="text"> <script> document.querySelector("input").focus(); console.log(document.activeElement.tagName); // → INPUT document.querySelector("input").blur(); console.log(document.activeElement.tagName); // → BODY </script>9 yang melakukan hal yang sama. Hal ini diperlukan karena peristiwa <input type="text"> <script> document.querySelector("input").focus(); console.log(document.activeElement.tagName); // → INPUT document.querySelector("input").blur(); console.log(document.activeElement.tagName); // → BODY </script>_9 hanya diaktifkan saat pengguna mengubah nilai bidang, bukan saat skrip melakukannya Ada objek lain yang mirip dengan <textarea> one two three </textarea>_27 disebut <textarea> one two three </textarea>50. Perbedaan antara keduanya adalah bahwa konten <textarea> one two three </textarea>50 dilupakan di akhir setiap sesi, yang bagi sebagian besar browser berarti setiap kali browser ditutup RingkasanHTML dapat mengekspresikan berbagai jenis bidang formulir, seperti bidang teks, kotak centang, bidang pilihan ganda, dan pemilih file Bidang tersebut dapat diperiksa dan dimanipulasi dengan JavaScript. Mereka memecat peristiwa <input type="text"> <script> document.querySelector("input").focus(); console.log(document.activeElement.tagName); // → INPUT document.querySelector("input").blur(); console.log(document.activeElement.tagName); // → BODY </script>9 saat diubah, peristiwa <form action="example/submit.html"> Name: <input type="text" name="name"><br> Password: <input type="password" name="password"><br> <button type="submit">Log in</button> </form> <script> var form = document.querySelector("form"); console.log(form.elements[1].type); // → password console.log(form.elements.password.type); // → password console.log(form.elements.name.form == form); // → true </script>4 saat teks diketik, dan berbagai peristiwa keyboard. Peristiwa ini memungkinkan kami untuk mengetahui saat pengguna berinteraksi dengan bidang. Properti seperti <input type="text"> <script> document.querySelector("input").focus(); console.log(document.activeElement.tagName); // → INPUT document.querySelector("input").blur(); console.log(document.activeElement.tagName); // → BODY </script>_7 (untuk bidang teks dan pilih) atau <form action="example/submit.html"> Name: <input type="text" name="name"><br> Password: <input type="password" name="password"><br> <button type="submit">Log in</button> </form> <script> var form = document.querySelector("form"); console.log(form.elements[1].type); // → password console.log(form.elements.password.type); // → password console.log(form.elements.name.form == form); // → true </script>5 (untuk kotak centang dan tombol radio) digunakan untuk membaca atau menyetel konten bidang Saat formulir dikirimkan, peristiwa <input type="text" tabindex=1> <a href=".">(help)</a> <button onclick="console.log('ok')" tabindex=2>OK</button>_9 akan aktif. Penangan JavaScript dapat memanggil <button>I'm all right</button> <button disabled>I'm out</button>_0 pada acara itu untuk mencegah pengiriman terjadi. Elemen bidang formulir tidak harus dibungkus dengan <select> <option>Pancakes</option> <option>Pudding</option> <option>Ice cream</option> </select>3 tag Saat pengguna telah memilih file dari sistem file lokal mereka di bidang pemilih file, antarmuka <textarea> one two three </textarea>13 dapat digunakan untuk mengakses konten file ini dari program JavaScript Objek <textarea> one two three </textarea>_27 dan <textarea> one two three </textarea>50 dapat digunakan untuk menyimpan informasi dengan cara yang bertahan dari pemuatan ulang halaman. Yang pertama menyimpan data selamanya (atau hingga pengguna memutuskan untuk menghapusnya), dan yang kedua menyimpannya hingga browser ditutup LatihanMeja kerja JavaScriptBangun antarmuka yang memungkinkan orang mengetik dan menjalankan potongan kode JavaScript Letakkan tombol di sebelah bidang <input type="text"> <script> document.querySelector("input").focus(); console.log(document.activeElement.tagName); // → INPUT document.querySelector("input").blur(); console.log(document.activeElement.tagName); // → BODY </script>4, yang ketika ditekan, menggunakan konstruktor <textarea> one two three </textarea>63 yang kita lihat untuk membungkus teks dalam suatu fungsi dan menyebutnya. Ubah nilai kembalian fungsi, atau kesalahan apa pun yang ditimbulkannya, menjadi string dan tampilkan setelah bidang teks <select> <option>Pancakes</option> <option>Pudding</option> <option>Ice cream</option> </select>0 Gunakan <textarea> one two three </textarea>_64 atau <textarea> one two three </textarea>65 untuk mendapatkan akses ke elemen yang ditentukan dalam HTML Anda. Penangan kejadian untuk <textarea> one two three </textarea>_66 atau <textarea> one two three </textarea>67 kejadian pada tombol bisa mendapatkan properti <input type="text"> <script> document.querySelector("input").focus(); console.log(document.activeElement.tagName); // → INPUT document.querySelector("input").blur(); console.log(document.activeElement.tagName); // → BODY </script>7 dari bidang teks dan memanggil <textarea> one two three </textarea>69 di atasnya Pastikan Anda menggabungkan panggilan ke <textarea> one two three </textarea>_69 dan panggilan ke hasilnya dalam blok <textarea> one two three </textarea>71 sehingga Anda dapat menangkap pengecualian yang dihasilkannya. Dalam hal ini, kami benar-benar tidak tahu jenis pengecualian apa yang kami cari, jadi tangkap semuanya Properti <textarea> one two three </textarea>_72 dari elemen keluaran dapat digunakan untuk mengisinya dengan pesan string. Atau, jika Anda ingin mempertahankan konten lama, buat simpul teks baru menggunakan <textarea> one two three </textarea>73 dan tambahkan ke elemen. Ingatlah untuk menambahkan karakter baris baru di akhir sehingga tidak semua keluaran muncul dalam satu baris Pelengkapan otomatisPerluas bidang teks sehingga saat pengguna mengetik, daftar nilai yang disarankan ditampilkan di bawah bidang. Anda memiliki larik nilai yang mungkin tersedia dan harus menunjukkan nilai yang dimulai dengan teks yang diketik. Saat saran diklik, ganti nilai bidang teks saat ini dengannya <select> <option>Pancakes</option> <option>Pudding</option> <option>Ice cream</option> </select>_1 Acara terbaik untuk memperbarui daftar saran adalah <form action="example/submit.html"> Name: <input type="text" name="name"><br> Password: <input type="password" name="password"><br> <button type="submit">Log in</button> </form> <script> var form = document.querySelector("form"); console.log(form.elements[1].type); // → password console.log(form.elements.password.type); // → password console.log(form.elements.name.form == form); // → true </script>4 karena itu akan langsung diaktifkan ketika konten bidang diubah Kemudian lewati array istilah dan lihat apakah mereka mulai dengan string yang diberikan. Misalnya, Anda dapat memanggil <textarea> one two three </textarea>75 dan melihat apakah hasilnya nol. Untuk setiap string yang cocok, tambahkan elemen ke saran <textarea> one two three </textarea>76. Anda mungkin juga harus mengosongkannya setiap kali Anda mulai memperbarui saran, misalnya dengan menyetel <textarea> one two three </textarea>72 ke string kosong Anda bisa menambahkan event handler <textarea> one two three </textarea>_66 ke setiap elemen saran atau menambahkan satu saja ke <textarea> one two three </textarea>76 luar yang menampungnya dan melihat properti <form action="example/submit.html"> Value: <input type="text" name="value"> <button type="submit">Save</button> </form> <script> var form = document.querySelector("form"); form.addEventListener("submit", function(event) { console.log("Saving value", form.elements.value.value); event.preventDefault(); }); </script>_4 dari acara tersebut untuk mengetahui saran mana yang diklik Untuk mengeluarkan teks saran dari simpul DOM, Anda dapat melihat <textarea> one two three </textarea>72 atau menyetel atribut untuk menyimpan teks secara eksplisit saat Anda membuat elemen Permainan Kehidupan ConwayConway's Game of Life adalah simulasi sederhana yang menciptakan "kehidupan" buatan pada sebuah kisi, yang setiap selnya hidup atau tidak. Setiap generasi (giliran), aturan berikut diterapkan
Tetangga didefinisikan sebagai setiap sel yang berdekatan, termasuk sel yang berdekatan secara diagonal Perhatikan bahwa aturan ini diterapkan ke seluruh kisi sekaligus, bukan satu kotak sekaligus. Itu berarti penghitungan tetangga didasarkan pada situasi di awal generasi, dan perubahan yang terjadi pada sel tetangga selama generasi ini seharusnya tidak memengaruhi keadaan baru sel tertentu. Terapkan game ini menggunakan struktur data mana pun yang menurut Anda sesuai. Gunakan <textarea> one two three </textarea>_82 untuk mengisi grid dengan pola acak pada awalnya. Menampilkannya sebagai petak bidang kotak centang, dengan tombol di sebelahnya untuk melanjutkan ke generasi berikutnya. Saat pengguna mencentang atau menghapus centang pada kotak centang, perubahannya harus disertakan saat menghitung generasi berikutnya <select> <option>Pancakes</option> <option>Pudding</option> <option>Ice cream</option> </select>_2 Untuk mengatasi masalah terjadinya perubahan secara konseptual pada saat yang sama, cobalah untuk melihat perhitungan generasi sebagai fungsi murni, yang mengambil satu kisi dan menghasilkan kisi baru yang mewakili giliran berikutnya. Mewakili kisi dapat dilakukan dengan salah satu cara yang ditunjukkan di Bab dan. Menghitung tetangga langsung dapat dilakukan dengan dua loop bersarang, mengulang pada koordinat yang berdekatan. Berhati-hatilah untuk tidak menghitung sel di luar bidang dan abaikan sel di tengah, yang tetangganya sedang kita hitung Membuat perubahan pada kotak centang berlaku pada generasi berikutnya dapat dilakukan dengan dua cara. Penangan kejadian dapat melihat perubahan ini dan memperbarui kisi saat ini untuk mencerminkannya, atau Anda dapat membuat kisi baru dari nilai di kotak centang sebelum menghitung giliran berikutnya Jika Anda memilih untuk menggunakan event handler, Anda mungkin ingin melampirkan atribut yang mengidentifikasi posisi yang sesuai dengan setiap kotak centang sehingga mudah untuk mengetahui sel mana yang akan diubah Untuk menggambar kisi kotak centang, Anda dapat menggunakan elemen <textarea> one two three </textarea>83 (lihat ) atau cukup letakkan semuanya dalam elemen yang sama dan letakkan elemen <textarea> one two three </textarea>84 (jeda baris) di antara baris Bagaimana Anda bisa mengirimkan formulir menggunakan JavaScript?Saat kita mengklik tautan, fungsi submitForm() akan dijalankan. Fungsi ini akan mendapatkan objek elemen menggunakan metode DOM getElementById() dengan meneruskan form id ke metode ini, kemudian formulir akan dikirimkan menggunakan metode submit(). Contoh. Buat formulir dan kirimkan menggunakan pendekatan di atas
Bagaimana cara mengumpulkan data formulir dengan JavaScript?Metode serializeArray() membuat larik objek (nama dan nilai) dengan membuat serialisasi nilai formulir . Metode ini dapat digunakan untuk mendapatkan data formulir. Parameter. Itu tidak menerima parameter apa pun. Nilai Pengembalian. Ini mengembalikan semua nilai yang ada di dalam kolom input.
Bagaimana cara menangani pengiriman formulir dalam JavaScript?Pengiriman Formulir JavaScript. Acara Penyerahan Dasar. Validasi Formulir Dasar. Kode JavaScript untuk Memvalidasi Email. . Daftar dapat diatur dengan font-size dan font-family yang sesuai Warna RGB latar belakang. #D8F1F8 Fokus input dan area kirim dapat ditentukan sesuai kebutuhan Bagaimana cara mendapatkan nilai pengiriman formulir dalam JavaScript?Gunakan FormData Constructor
untuk mendengarkan acara pengiriman formulir dan dapatkan nilainya saat kami mengirim . Kami pertama kali mendapatkan elemen formulir dengan dokumen. querySelector. Kemudian kami memanggil addEventListener untuk menambahkan pendengar acara kirim ke formulir. |