Bir kez kovulduktan sonra evt.preventDefault()
, varsayılan işlemleri nasıl tekrar başlatabilirim?
Bir kez kovulduktan sonra evt.preventDefault()
, varsayılan işlemleri nasıl tekrar başlatabilirim?
Yanıtlar:
@Prescott tarafından yorumlandığı gibi, tam tersi:
evt.preventDefault();
Olabilirdi:
Esasen 'varsayılan yap' ile eşittir , çünkü artık onu engellemiyoruz.
Aksi takdirde, sizi başka bir yorum ve cevap tarafından verilen yanıtlara yönlendirmeye meyilliyim:
Event.preventDefault () (jQuery kullanarak) öğesini çağıran bir dinleyiciyi nasıl açabilirim?
Event.preventDefault nasıl yeniden etkinleştirilir?
İkincisinin, redsquare tarafından verilen örnek bir çözümle kabul edildiğine dikkat edin (bunun yinelenen olarak kapatılmaması durumunda doğrudan bir çözüm için yayınlanmıştır):
$('form').submit( function(ev) {
ev.preventDefault();
//later you decide you want to submit
$(this).unbind('submit').submit()
});
click
JQuery'deki bir olaydan gelen bağlantıya devam etmeden önce bir komutu işlemek için :
Örneğin: <a href="http://google.com/" class="myevent">Click me</a>
JQuery ile önleyin ve takip edin:
$('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");
}
});
Ya da sadece koşmak window.location = this.href;
sonrapreventDefault();
Bir zaman uyumsuz çağrı yürütmek için jQuery bir form gönderme gecikmek zorunda kaldı. İşte basitleştirilmiş kod ...
$("$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;
ve tam tersi (standart):
event.returnValue = true;
kaynak: https://developer.mozilla.org/en-US/docs/Web/API/Event/returnValue
Aşağıdaki modeli öneririm:
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>
... bir şey eksik olmadıkça.
event.preventDefault()
Neden event.preventDefault()
onu çağırdığınızda nelere dikkat etmeniz gerektiğini anlamak için zıt bir yöntem yoktur .
Kaputun altında, cancelDefault işlevi, daha fazla yürütmeyi durduran bir dönüş yanlışı çağırıyor. Javascript'in eski yollarını biliyorsanız, form gönderimleri ve return true kullanan düğmelerdeki olayları (jQuery bile daha önce olmadan) iptal etmek için return false kullanmak bir zamanlar moda oldu.
Muhtemelen yukarıdaki basit açıklamaya dayanarak zaten çalışmış olabileceğiniz gibi: bunun tersi event.preventDefault()
hiçbir şey değildir. Sadece olayı engellemezsiniz, varsayılan olarak tarayıcı olayı engellemezseniz izin verir.
Bir açıklama için aşağıya bakın:
;(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);
Yukarıdaki kodda allowSubmit'in yanlış olup olmadığını kontrol ettiğimizi göreceksiniz. Bu, formumuzu kullanarak göndermemizi engelleyeceğiz event.preventDefault
ve sonra bazı doğrulama mantığı yapacağız ve mutluysak, allowSubmit'i true olarak ayarlayın.
Bu gerçekten tam tersini yapmanın tek etkili yoludur event.preventDefault()
- aynı şeyi başaracak olayları da kaldırmayı deneyebilirsiniz.
İşte faydalı bir şey ...
Her şeyden önce bağlantıyı tıklayacağız, bazı kodlar çalıştıracağız ve daha sonra varsayılan işlemi gerçekleştireceğiz. Bu olay event.currentTarget kullanılarak mümkün olacaktır . Bir göz atın. Burada Google'a yeni bir sekmede erişmeye çalışacağız, ancak bir kod çalıştırmamız gerekmeden önce.
<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>
Ben ayarlamak için kullanılan budur:
$("body").on('touchmove', function(e){
e.preventDefault();
});
Ve geri almak için:
$("body").unbind("touchmove");
Çözümlerin hiçbiri burada bana yardımcı olmadı ve bunu durumumu çözmek için yaptım.
<a onclick="return clickEvent(event);" href="/contact-us">
Ve fonksiyon 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();
}
Sanırım "karşıt" bir olayı simüle etmek olacaktır. Kullanabilirsin.createEvent()
Aşağıdaki Mozilla örneği:
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");
}
}
Referans: document.createEvent
jQuery .trigger()
öğelerde olayları tetikleyebilmenizi sağlar - bazen yararlıdır.
$('#foo').bind('click', function() {
alert($(this).text());
});
$('#foo').trigger('click');
jquery on () buna başka bir çözüm olabilir. özellikle ad alanlarının kullanımı söz konusu olduğunda .
jquery on () yalnızca bağlama olaylarının geçerli yoludur (bind () yerine). off () bunları çözmek içindir. ve bir ad alanı kullandığınızda, birden fazla farklı etkinlik ekleyebilir ve kaldırabilirsiniz.
$( 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");
}
});
şimdi ad alanı kullanımı ile, bu olayların birden ekleyebilir ve ihtiyaçlarınıza bağlı olarak bunları kaldırabilirsiniz .. Gönderme en iyi örnek olmayabilir, ancak bu bir tıklama veya tuşa basma ya da her neyse kullanışlı olabilir ..
Bu soru için doğrudan bir cevap değildir, ancak birisine yardımcı olabilir. Demek istediğim, tüm durumlar için preventDefault () öğesini çağırdığınızda olay olmanın bir anlamı olmadığından, yalnızca bazı koşullara bağlı olarak preventDefault () öğesini çağırmanızdır. Bu nedenle, koşulların olması ve yalnızca koşul / koşulların karşılanması durumunda preventDefault () işlevinin çağrılması işlevi diğer durumlarda olağan şekilde çalışacaktır.
$('.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
});
bunu "preventDefault" yönteminden sonra kullanabilirsiniz
// Burada evt.target varsayılanı döndürme olayı (ör: defult url etc)
var defaultEvent=evt.target;
// Burada varsayılan etkinliği kaydediyoruz ..
if("true")
{
//activate default event..
location.href(defaultEvent);
}
bu kod kullandıktan sonra olayı yeniden başlatmak için benim için çalıştı:
event.preventDefault(); to disable the event.
event.preventDefault = false;
Aşağıdaki kodu kullandım. Benim için iyi çalışıyor.
$('a').bind('click', function(e) {
e.stopPropagation();
});
event.preventDefault()
;