Una volta che ho sparato evt.preventDefault()
, come posso riprendere di nuovo le azioni predefinite?
Una volta che ho sparato evt.preventDefault()
, come posso riprendere di nuovo le azioni predefinite?
Risposte:
Come commentato da @Prescott, l'opposto di:
evt.preventDefault();
Potrebbe essere:
Essenzialmente equivalente a "fare default" , poiché non lo stiamo più impedendo.
Altrimenti sono propenso a indicarti le risposte fornite da altri commenti e risposte:
Come separare un ascoltatore che chiama event.preventDefault () (usando jQuery)?
Come riattivare event.preventDefault?
Si noti che la seconda è stata accettata con una soluzione di esempio, fornita da redsquare (pubblicata qui per una soluzione diretta nel caso in cui questa non sia chiusa come duplicata):
$('form').submit( function(ev) {
ev.preventDefault();
//later you decide you want to submit
$(this).unbind('submit').submit()
});
function(evt) {evt.preventDefault();}
e il suo contrario
function(evt) {return true;}
Saluti!
return true
: niente.
Per elaborare un comando prima di continuare un collegamento da un click
evento in jQuery:
Per esempio: <a href="http://google.com/" class="myevent">Click me</a>
Prevenire e seguire con 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");
}
});
O semplicemente insegui window.location = this.href;
ilpreventDefault();
Ho dovuto ritardare l'invio di un modulo in jQuery per eseguire una chiamata asincrona. Ecco il codice semplificato ...
$("$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;
e il suo opposto (standard):
event.returnValue = true;
fonte: https://developer.mozilla.org/en-US/docs/Web/API/Event/returnValue
Vorrei suggerire il seguente modello:
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>
... a meno che non mi manchi qualcosa.
Non esiste un metodo opposto event.preventDefault()
per capire perché devi prima esaminare cosa event.preventDefault()
fa quando lo chiami.
Sotto il cofano, la funzionalità di preventDefault sta essenzialmente chiamando un ritorno falso che blocca qualsiasi ulteriore esecuzione. Se hai familiarità con i vecchi modi di Javascript, una volta era di moda usare return false per cancellare eventi su cose come invii di moduli e pulsanti usando return true (prima ancora che jQuery fosse in giro).
Come probabilmente avrai già capito basandoti sulla semplice spiegazione sopra: l'opposto di event.preventDefault()
è nulla. Semplicemente non si impedisce l'evento, per impostazione predefinita il browser consentirà l'evento se non lo si sta impedendo.
Vedi sotto per una spiegazione:
;(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);
Nel codice sopra noterai che stiamo controllando se allowSubmit è falso. Ciò significa che impediremo l'invio del nostro modulo mediante event.preventDefault
e quindi eseguiremo alcune logiche di convalida e, se siamo soddisfatti, impostare allowSubmit su true.
Questo è davvero l'unico metodo efficace per fare l'opposto di event.preventDefault()
- puoi anche provare a rimuovere anche gli eventi che sostanzialmente raggiungerebbero la stessa cosa.
Ecco qualcosa di utile ...
Prima di tutto faremo clic sul collegamento, eseguiremo un po 'di codice e poi eseguiremo l'azione predefinita. Questo sarà possibile utilizzando event.currentTarget Dai un'occhiata. Qui proveremo ad accedere a Google in una nuova scheda, ma prima dobbiamo eseguire un po 'di codice.
<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>
Questo è ciò che ho usato per impostarlo:
$("body").on('touchmove', function(e){
e.preventDefault();
});
E per annullarlo:
$("body").unbind("touchmove");
Nessuna delle soluzioni mi ha aiutato qui e l'ho fatto per risolvere la mia situazione.
<a onclick="return clickEvent(event);" href="/contact-us">
E la funzione 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();
}
Suppongo che "l'opposto" sarebbe simulare un evento. Puoi usare.createEvent()
Seguendo l'esempio di 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");
}
}
Rif: document.createEvent
jQuery ha .trigger()
così puoi innescare eventi su elementi - a volte utili.
$('#foo').bind('click', function() {
alert($(this).text());
});
$('#foo').trigger('click');
jquery on () potrebbe essere un'altra soluzione a questo. soprattutto quando si tratta dell'uso di spazi dei nomi .
jquery on () è solo il modo attuale di associare eventi (invece di bind ()). off () è di scioglierli. e quando si utilizza uno spazio dei nomi, è possibile aggiungere e rimuovere più eventi diversi.
$( 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");
}
});
ora con l'uso dello spazio dei nomi, è possibile aggiungere più di questi eventi e sono in grado di rimuoverli, a seconda delle proprie esigenze .. mentre submit potrebbe non essere il miglior esempio, questo potrebbe tornare utile su un clic o premere un tasto o altro ..
Questa non è una risposta diretta alla domanda, ma può aiutare qualcuno. Il mio punto è che si chiama preventDefault () solo in base ad alcune condizioni in quanto non ha senso avere un evento se si chiama preventDefault () per tutti i casi. Quindi avere if condizioni e chiamare preventDefault () solo quando le condizioni soddisfatte funzioneranno normalmente negli altri casi.
$('.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
});
puoi usarlo dopo il metodo "preventDefault"
// Qui evt.target restituisce un evento predefinito (ad es. Url di default ecc.)
var defaultEvent=evt.target;
// Qui salviamo l'evento predefinito.
if("true")
{
//activate default event..
location.href(defaultEvent);
}
questo codice ha funzionato per me per ri-istanziare l'evento dopo che avevo usato:
event.preventDefault(); to disable the event.
event.preventDefault = false;
Ho usato il seguente codice. Funziona bene per me.
$('a').bind('click', function(e) {
e.stopPropagation();
});
event.preventDefault()
;