Di sini, di stackoverflow, jika Anda mulai melakukan perubahan maka Anda mencoba menavigasi menjauh dari halaman, tombol konfirmasi javascript muncul dan bertanya: "Apakah Anda yakin ingin menavigasi menjauh dari halaman ini?" blee bla bloo ...
Adakah yang pernah menerapkan ini sebelumnya, bagaimana cara melacak bahwa perubahan dilakukan? Saya percaya saya bisa melakukan ini sendiri, saya mencoba mempelajari praktik yang baik dari Anda para ahli.
Saya mencoba yang berikut tetapi masih tidak berhasil:
<html>
<body>
<p>Close the page to trigger the onunload event.</p>
<script type="text/javascript">
var changes = false;
window.onbeforeunload = function() {
if (changes)
{
var message = "Are you sure you want to navigate away from this page?\n\nYou have started writing or editing a post.\n\nPress OK to continue or Cancel to stay on the current page.";
if (confirm(message)) return true;
else return false;
}
}
</script>
<input type='text' onchange='changes=true;'> </input>
</body>
</html>
Adakah yang bisa memposting contoh?
javascript
html
message
onbeforeunload
confirm
Shimmy Weitzhandler
sumber
sumber
Jawaban:
Pembaruan (2017)
Browser modern sekarang mempertimbangkan menampilkan pesan khusus sebagai bahaya keamanan dan karenanya telah dihapus dari semuanya. Browser sekarang hanya menampilkan pesan umum. Karena kita tidak perlu lagi khawatir tentang pengaturan pesan, itu sesederhana:
Baca di bawah untuk dukungan browser lawas.
Pembaruan (2013)
Jawaban asli cocok untuk IE6-8 dan FX1-3.5 (yang kami targetkan kembali pada tahun 2009 ketika ditulis), tetapi agak ketinggalan zaman sekarang dan tidak akan berfungsi di sebagian besar browser saat ini - saya telah meninggalkan di bawah ini untuk referensi.
Ini
window.onbeforeunload
tidak diperlakukan secara konsisten oleh semua browser. Itu harus berupa referensi fungsi dan bukan string (seperti jawaban asli dinyatakan) tetapi itu akan berfungsi di browser yang lebih lama karena cek untuk sebagian besar dari mereka tampaknya apakah ada sesuatu yang ditugaskanonbeforeunload
(termasuk fungsi yang mengembalikannull
).Anda mengatur
window.onbeforeunload
ke referensi fungsi, tetapi di browser lama Anda harus mengaturreturnValue
acara bukan hanya mengembalikan string:Anda tidak dapat
confirmOnPageExit
melakukan itu dengan memeriksa dan mengembalikan nol jika Anda ingin pengguna melanjutkan tanpa pesan. Anda masih harus menghapus acara untuk menyalakan dan mematikannya dengan andal:Jawaban asli (bekerja pada 2009)
Untuk mengaktifkannya:
Untuk mematikannya:
Ingatlah bahwa ini bukan peristiwa biasa - Anda tidak dapat mengikatnya dengan cara standar.
Untuk memeriksa nilai? Itu tergantung pada kerangka validasi Anda.
Di jQuery ini bisa berupa (contoh sangat mendasar):
sumber
$("#submit_button").click(function() { window.onbeforeunload = null; });
. Saya awalnya menggunakan acara onclick tombol, tetapi selain tidak sebaik, itu juga tidak bekerja dengan IE8.window.onbeforeunload
acara tersebut.Itu
onbeforeunload
Microsoft-isme adalah hal yang paling dekat kita harus larutan standar, tetapi menyadari bahwa dukungan browser tidak merata; misal untuk Opera, ia hanya berfungsi dalam versi 12 dan yang lebih baru (masih dalam versi beta saat penulisan ini).Juga, untuk kompatibilitas maksimum , Anda perlu melakukan lebih dari sekadar mengembalikan string, seperti yang dijelaskan pada Jaringan Pengembang Mozilla .
Contoh: Tetapkan dua fungsi berikut untuk mengaktifkan / menonaktifkan prompt navigasi (lih. Contoh MDN):
Kemudian tentukan formulir seperti ini:
Dengan cara ini, pengguna hanya akan diperingatkan tentang menavigasi jika dia telah mengubah area teks, dan tidak akan diminta ketika dia benar-benar mengirimkan formulir.
sumber
Untuk membuatnya bekerja di Chrome dan Safari, Anda harus melakukannya seperti ini
Referensi: https://developer.mozilla.org/en/DOM/window.onbeforeunload
sumber
Dengan JQuery , hal ini cukup mudah dilakukan. Karena Anda dapat mengikat ke set.
Tidak cukup untuk melakukan onbeforeunload, Anda hanya ingin memicu navigasi pergi jika seseorang mulai mengedit barang.
sumber
jquerys 'beforeunload' bekerja bagus untukku
sumber
untuk orang baru yang mencari solusi sederhana, coba saja Areyousure.js
sumber
Ini adalah cara mudah untuk menyajikan pesan jika ada data yang dimasukkan ke dalam formulir, dan tidak menunjukkan pesan jika formulir dikirimkan:
sumber
Untuk memperluas jawaban Keith yang sudah luar biasa :
Pesan peringatan khusus
Untuk mengizinkan pesan peringatan khusus, Anda dapat membungkusnya dalam fungsi seperti ini:
Kemudian panggil fungsi itu dengan pesan khusus Anda:
Mengaktifkan navigasi lagi
Untuk mengaktifkan kembali navigasi, yang perlu Anda lakukan adalah menyetel
window.onbeforeunload
kenull
. Ini dia, dibungkus dengan fungsi kecil yang rapi yang bisa dipanggil di mana saja:Menggunakan jQuery untuk mengikat ini untuk membentuk elemen
Jika menggunakan jQuery, ini dapat dengan mudah terikat ke semua elemen formulir seperti ini:
Kemudian untuk memungkinkan formulir dikirimkan:
Bentuk yang dimodifikasi secara dinamis:
preventNavigation()
danenableNavigation()
dapat terikat ke fungsi lain yang diperlukan, seperti memodifikasi formulir secara dinamis, atau mengklik tombol yang mengirimkan permintaan AJAX. Saya melakukan ini dengan menambahkan elemen input tersembunyi ke formulir:Lalu kapan pun saya ingin mencegah pengguna menavigasi, saya memicu perubahan pada input itu untuk memastikan bahwa
preventNavigation()
dieksekusi:sumber
Di sini coba ini berfungsi 100%
sumber
The negara standar yang bisikan dapat dikontrol dengan membatalkan beforeunload acara atau pengaturan nilai kembali ke nilai non-null . Ini juga menyatakan bahwa penulis harus menggunakan Event.preventDefault () alih-alih returnValue, dan pesan yang ditampilkan kepada pengguna tidak dapat dikustomisasi .
Pada 69.0.3497.92, Chrome belum memenuhi standar. Namun, ada laporan bug yang diajukan, dan tinjauan sedang berlangsung. Chrome mengharuskan returnValue harus ditetapkan dengan merujuk ke objek acara, bukan nilai yang dikembalikan oleh pawang.
Adalah tanggung jawab penulis untuk melacak apakah perubahan telah dilakukan; itu bisa dilakukan dengan variabel atau dengan memastikan acara hanya ditangani bila perlu.
sumber
Saat pengguna mulai membuat perubahan pada formulir, bendera boolean akan ditetapkan. Jika pengguna kemudian mencoba menavigasi jauh dari halaman, Anda memeriksa tanda itu di window.onunload acara. Jika flag diatur, Anda menunjukkan pesan dengan mengembalikannya sebagai string. Mengembalikan pesan sebagai string akan memunculkan dialog konfirmasi yang berisi pesan Anda.
Jika Anda menggunakan ajax untuk melakukan perubahan, Anda dapat mengatur bendera
false
setelah perubahan dilakukan (yaitu dalam acara sukses ajax).sumber
Anda bisa menambahkan
onchange
acara di textarea (atau bidang lainnya) yang mengatur variabel dalam JS. Ketika pengguna mencoba untuk menutup halaman (window.onunload) Anda memeriksa nilai variabel itu dan menunjukkan peringatan yang sesuai.sumber
alert
danconfirm
diblokir selamawindow.onbeforeunload
danwindow.onunload
(paling tidak dalam versi Chrome di PC saya, tetapi mungkin juga di setiap browser yang mendukung penangan tersebut).Berdasarkan semua jawaban di utas ini, saya menulis kode berikut dan itu berhasil untuk saya.
Jika Anda hanya memiliki beberapa tag input / textarea yang memerlukan aktivitas onunload untuk diperiksa, Anda dapat menetapkan atribut data HTML5 sebagai
data-onunload="true"
untuk mis.
dan Javascript (jQuery) dapat terlihat seperti ini:
sumber
ini html saya
Jadi ini adalah bagaimana saya melakukan sesuatu yang serupa di javaScript
sumber
Hal ini dapat dengan mudah dilakukan dengan menetapkan ChangeFlag ke true, pada onChange acara Textarea . Gunakan javascript untuk menampilkan kotak dialog konfirmasi berdasarkan nilai ChangeFlag . Buang formulir dan navigasikan ke halaman yang diminta jika konfirmasi kembali benar, jika tidak lakukan apa-apa .
sumber
Apa yang ingin Anda gunakan adalah peristiwa onunload di JavaScript.
Berikut ini sebuah contoh: http://www.w3schools.com/jsref/event_onunload.asp
sumber
Ada parameter "onunload" untuk tag tubuh Anda dapat memanggil fungsi javascript dari sana. Jika itu kembali palsu itu mencegah menavigasi.
sumber
<body onunload="return false;">
.