Ich habe eine Webseite, auf der ich die Standardaktion für alle Übermittlungsschaltflächen verhindert habe. Ich möchte jedoch die Standardübermittlungsaktion für eine Schaltfläche wieder aktivieren. Wie kann ich das tun?
Ich verhindere derzeit die Standardaktion wie folgt:
$("form").bind("submit", function(e){
e.preventDefault();
});
Ich habe dies erfolgreich mit folgendem durchgeführt:
$(document).ready(function(){
$("form:not('#press')").bind("submit", function(e){
e.preventDefault();
});
Aber kann ich das dynamisch tun, wenn auf die Schaltfläche geklickt wird?
javascript
jquery
Richbits
quelle
quelle
Antworten:
Sie müssten das Ereignis aufheben und entweder erneut an ein separates Ereignis binden, das Default nicht verhindert, oder das Standardereignis später in der Methode nach dem Aufheben der Bindung selbst aufrufen. Es gibt kein magisches Ereignis. Abgebrochen = falsch;
Wie gewünscht
$('form').submit( function(ev){ ev.preventDefault(); //later you decide you want to submit $(this).unbind('submit').submit() });
quelle
if (someLongRunningOperation()) {e.preventDefault();}
kann definitiv aus diesem Grund scheitern; Ich habe genau dieses Problem selbst getestet, kurz bevor ich meinen Kommentar geschrieben habe.Entweder Sie tun, was redsquare mit diesem Code vorschlägt:
function preventDefault(e) { e.preventDefault(); } $("form").bind("submit", preventDefault); // later, now switching back $("form#foo").unbind("submit", preventDefault);
Oder Sie weisen ein Formularattribut zu, wenn das Senden zulässig ist. Etwas wie das:
function preventDefault(e) { if (event.currentTarget.allowDefault) { return; } e.preventDefault(); } $("form").bind("submit", preventDefault); // later, now allowing submissions on the form $("form#foo").get(0).allowDefault = true;
quelle
function(e){ e.preventDefault();
und sein Gegenteil
function(e){ return true; }
Prost!
quelle
$('form').submit( function(e){ e.preventDefault(); //later you decide you want to submit $(this).trigger('submit'); or $(this).trigger('anyEvent');
quelle
ev
vse
und$(this).trigger('submit')
hier wird in gleich laufene.preventDefault()
. Das ist eine schlechte Antwort.Mit asynchronen Aktionen (Timer, Ajax) können Sie die Eigenschaft folgendermaßen überschreiben
isDefaultPrevented
:$('a').click(function(evt){ e.preventDefault(); // in async handler (ajax/timer) do these actions: setTimeout(function(){ // override prevented flag to prevent jquery from discarding event evt.isDefaultPrevented = function(){ return false; } // retrigger with the exactly same event data $(this).trigger(evt); }, 1000); }
Dies ist die vollständigste Methode, um das Ereignis mit genau denselben Daten erneut auszulösen.
quelle
Ich hatte kürzlich ein ähnliches Problem. Ich hatte ein Formular und eine PHP-Funktion, die ausgeführt werden sollten, sobald das Formular gesendet wurde. Ich musste jedoch zuerst ein Javascript ausführen.
// This variable is used in order to determine if we already did our js fun var window.alreadyClicked = "NO" $("form:not('#press')").bind("submit", function(e){ // Check if we already run js part if(window.alreadyClicked == "NO"){ // Prevent page refresh e.preventDefault(); // Change variable value so next time we submit the form the js wont run window.alreadyClicked = "YES" // Here is your actual js you need to run before doing the php part xxxxxxxxxx // Submit the form again but since we changed the value of our variable js wont be run and page can reload (and php can do whatever you told it to) $("form:not('#press')").submit() } });
quelle
Sie können die Aktionen durch Hinzufügen wieder aktivieren
this.delegateEvents(); // Re-activates the events for all the buttons
Wenn Sie es der Renderfunktion einer Backbone-JS-Ansicht hinzufügen, können Sie event.preventDefault () nach Bedarf verwenden.
quelle