Setelah saya memecat seorang evt.preventDefault()
, bagaimana saya bisa melanjutkan tindakan standar lagi?
Setelah saya memecat seorang evt.preventDefault()
, bagaimana saya bisa melanjutkan tindakan standar lagi?
Jawaban:
Seperti yang dikomentari oleh @Prescott, kebalikan dari:
evt.preventDefault();
Bisa jadi:
Pada dasarnya menyamakan dengan 'lakukan default' , karena kami tidak lagi mencegahnya.
Kalau tidak, saya cenderung mengarahkan Anda ke jawaban yang diberikan oleh komentar dan jawaban lain:
Bagaimana cara mengaktifkan kembali event.preventDefault?
Perhatikan bahwa yang kedua telah diterima dengan solusi contoh, diberikan oleh redsquare (diposting di sini untuk solusi langsung jika ini tidak ditutup sebagai duplikat):
$('form').submit( function(ev) {
ev.preventDefault();
//later you decide you want to submit
$(this).unbind('submit').submit()
});
function(evt) {evt.preventDefault();}
dan kebalikannya
function(evt) {return true;}
Bersulang!
return true
: tidak ada.
Untuk memproses perintah sebelum melanjutkan tautan dari click
acara di jQuery:
Misalnya: <a href="http://google.com/" class="myevent">Click me</a>
Cegah dan tindak lanjuti dengan jQuery:
$('a.myevent').click(function(event) {
event.preventDefault();
// Do my commands
if( myEventThingFirst() )
{
// then redirect to original location
window.location = this.href;
}
else
{
alert("Couldn't do my thing first");
}
});
Atau jalankan window.location = this.href;
setelahpreventDefault();
Saya harus menunda pengiriman formulir di jQuery untuk menjalankan panggilan asinkron. Berikut kode yang disederhanakan ...
$("$theform").submit(function(e) {
e.preventDefault();
var $this = $(this);
$.ajax('/path/to/script.php',
{
type: "POST",
data: { value: $("#input_control").val() }
}).done(function(response) {
$this.unbind('submit').submit();
});
});
event.preventDefault(); //or event.returnValue = false;
dan kebalikannya (standar):
event.returnValue = true;
sumber: https://developer.mozilla.org/en-US/docs/Web/API/Event/returnValue
Saya akan menyarankan pola berikut:
document.getElementById("foo").onsubmit = function(e) {
if (document.getElementById("test").value == "test") {
return true;
} else {
e.preventDefault();
}
}
<form id="foo">
<input id="test"/>
<input type="submit"/>
</form>
... kecuali aku kehilangan sesuatu.
Tidak ada metode yang berlawanan event.preventDefault()
untuk memahami mengapa Anda pertama-tama harus melihat apa yang event.preventDefault()
dilakukannya ketika Anda menyebutnya.
Di bawah tenda, fungsionalitas untuk preventDefault pada dasarnya memanggil return false yang menghentikan eksekusi lebih lanjut. Jika Anda terbiasa dengan cara-cara lama Javascript, sudah saatnya untuk menggunakan return false untuk membatalkan acara pada hal-hal seperti pengiriman formulir dan tombol menggunakan return true (sebelum jQuery bahkan ada).
Seperti yang mungkin sudah Anda lakukan berdasarkan penjelasan sederhana di atas: kebalikan dari event.preventDefault()
tidak ada. Anda hanya tidak mencegah acara tersebut, secara default browser akan mengizinkan acara jika Anda tidak mencegahnya.
Lihat penjelasan di bawah ini:
;(function($, window, document, undefined)) {
$(function() {
// By default deny the submit
var allowSubmit = false;
$("#someform").on("submit", function(event) {
if (!allowSubmit) {
event.preventDefault();
// Your code logic in here (maybe form validation or something)
// Then you set allowSubmit to true so this code is bypassed
allowSubmit = true;
}
});
});
})(jQuery, window, document);
Dalam kode di atas Anda akan melihat kami memeriksa apakah allowSubmit salah. Ini berarti kami akan mencegah formulir kami mengirimkan menggunakan event.preventDefault
dan kemudian kami akan melakukan beberapa logika validasi dan jika kami senang, set allowSubmit menjadi true.
Ini benar-benar satu-satunya metode yang efektif untuk melakukan yang sebaliknya event.preventDefault()
- Anda juga dapat mencoba menghapus acara yang pada dasarnya akan mencapai hal yang sama.
Ini sesuatu yang bermanfaat ...
Pertama-tama kita akan mengklik tautan, menjalankan beberapa kode, dan kemudian kita akan melakukan tindakan default. Ini akan dimungkinkan menggunakan event.currentTarget Lihatlah. Di sini kita akan mencoba mengakses Google pada tab baru, tetapi sebelum kita perlu menjalankan beberapa kode.
<a href="https://www.google.com.br" target="_blank" id="link">Google</a>
<script type="text/javascript">
$(document).ready(function() {
$("#link").click(function(e) {
// Prevent default action
e.preventDefault();
// Here you'll put your code, what you want to execute before default action
alert(123);
// Prevent infinite loop
$(this).unbind('click');
// Execute default action
e.currentTarget.click();
});
});
</script>
Ini yang saya gunakan untuk mengaturnya:
$("body").on('touchmove', function(e){
e.preventDefault();
});
Dan untuk membatalkannya:
$("body").unbind("touchmove");
Tidak ada solusi yang membantu saya di sini dan saya melakukan ini untuk menyelesaikan situasi saya.
<a onclick="return clickEvent(event);" href="/contact-us">
Dan fungsinya clickEvent()
,
function clickEvent(event) {
event.preventDefault();
// do your thing here
// remove the onclick event trigger and continue with the event
event.target.parentElement.onclick = null;
event.target.parentElement.click();
}
Saya kira "lawannya" adalah untuk mensimulasikan suatu peristiwa. Anda bisa menggunakannya.createEvent()
Berikut contoh Mozilla:
function simulateClick() {
var evt = document.createEvent("MouseEvents");
evt.initMouseEvent("click", true, true, window,
0, 0, 0, 0, 0, false, false, false, false, 0, null);
var cb = document.getElementById("checkbox");
var cancelled = !cb.dispatchEvent(evt);
if(cancelled) {
// A handler called preventDefault
alert("cancelled");
} else {
// None of the handlers called preventDefault
alert("not cancelled");
}
}
Ref: document.createEvent
jQuery memiliki .trigger()
sehingga Anda dapat memicu peristiwa pada elemen - terkadang bermanfaat.
$('#foo').bind('click', function() {
alert($(this).text());
});
$('#foo').trigger('click');
jquery on () bisa menjadi solusi lain untuk ini. escpacially ketika datang ke penggunaan ruang nama .
jquery on () hanyalah cara saat ini untuk mengikat acara (bukan bind ()). off () adalah untuk melepaskan ikatan ini. dan ketika Anda menggunakan namespace, Anda dapat menambah dan menghapus beberapa acara yang berbeda.
$( selector ).on("submit.my-namespace", function( event ) {
//prevent the event
event.preventDefault();
//cache the selector
var $this = $(this);
if ( my_condition_is_true ) {
//when 'my_condition_is_true' is met, the binding is removed and the event is triggered again.
$this.off("submit.my-namespace").trigger("submit");
}
});
sekarang dengan menggunakan namespace, Anda dapat menambahkan beberapa dari acara ini dan dapat menghapusnya, tergantung pada kebutuhan Anda .. sementara mengirimkan mungkin bukan contoh terbaik, ini mungkin berguna pada klik atau penekanan tombol atau apa pun ..
Ini bukan jawaban langsung untuk pertanyaan tetapi dapat membantu seseorang. Maksud saya adalah Anda hanya memanggil preventDefault () berdasarkan pada beberapa kondisi karena tidak ada gunanya mengadakan acara jika Anda memanggil preventDefault () untuk semua kasus. Jadi memiliki jika kondisi dan panggilan preventDefault () hanya ketika kondisi puas akan berfungsi dengan cara biasa untuk kasus-kasus lain.
$('.btnEdit').click(function(e) {
var status = $(this).closest('tr').find('td').eq(3).html().trim();
var tripId = $(this).attr('tripId');
if (status == 'Completed') {
e.preventDefault();
alert("You can't edit completed reservations");
} else if (tripId != '') {
e.preventDefault();
alert("You can't edit a reservation which is already attached to a trip");
}
//else it will continue as usual
});
Anda dapat menggunakan ini setelah metode "preventDefault"
// Di sini evt.target kembali acara default (mis .: url urung dll)
var defaultEvent=evt.target;
// Di sini kita menyimpan acara default ..
if("true")
{
//activate default event..
location.href(defaultEvent);
}
kode ini berfungsi untuk saya instantiate ulang acara setelah saya menggunakan:
event.preventDefault(); to disable the event.
event.preventDefault = false;
Saya telah menggunakan kode berikut. Ini bekerja dengan baik untuk saya.
$('a').bind('click', function(e) {
e.stopPropagation();
});
event.preventDefault()
;