2013-02-22 16 views
8
Absenden

Ich mag eine Submit-Button verhindern, mit Onclick-Ereignisse von der Abgabe:Prevent Submit-Button mit Onclick-Ereignisse von

$j('form#userForm .button').click(function(e) { 
    if ($j("#zip_field").val() > 1000){ 
     $j('form#userForm .button').attr('onclick','').unbind('click'); 
     alert('Sorry we leveren alleen inomstreken hijen!'); 
     e.preventDefault(); 
     return false; 
    } 
}); 

Dies ist die Submit-Button:

<button class="button vm-button-correct" type="submit" 
onclick="javascript:return myValidator(userForm, 'savecartuser');">Opslaan</button> 

Es wird die „alert zeigen "Funktion und entfernt auch das onclick-Ereignis, aber das Formular wird trotzdem gesendet. Entfernen Sie das onclick-Ereignis manuell, bevor Sie das Problem lösen. Dies ist jedoch die Kernfunktionalität von und ich möchte sie nicht entfernen.

EDIT:

Es ist auf jeden Fall von dem Onclick Selektor verursacht .. Wie kann ich meinen jQuery-Skript erzwingen sofort das Onclick-Ereignis neu zu laden? vor jquery Code hinzufügen: $j('form#userForm .button').attr('onclick',''); wird Problem lösen .. aber meine Validierung wird ein nicht mehr funktionieren ...

+0

Sie sollten wirklich das tun in dem einreichen Handler des Formulars .. wenn Sie die Eingabetaste drücken wenn das Formular den Fokus hat, wird es den Submit-Handler auslösen und nicht Ihr Klick, daher wird Ihre Validierung umgangen –

Antwort

18

Sie werden das Ereignis als Parameter hinzufügen müssen:

$j('form#userForm .button').click(function(event) { // <- goes here ! 
    if (parseInt($j("#zip_field").val(), 10) > 1000){ 
     event.preventDefault(); 
     $j('form#userForm .button').attr('onclick','').unbind('click'); 
     alert('Sorry we leveren alleen inomstreken hijen!'); 
    } 
}); 

Auch val() immer gibt eine Zeichenkette zurück, also wäre es eine gute Übung, sie in eine Zahl umzuwandeln, bevor Sie sie mit einer Zahl vergleichen, und ich bin mir nicht sicher, ob Sie wirklich alle .button Elemente innerhalb von #userForm innerhalb der Funktion abzielen, oder wenn Sie verwenden sollten this stattdessen? Wenn Sie jQuery 1.7+ verwenden, sollten Sie die Verwendung von on() und off() dafür in Betracht ziehen.

+0

thx, ich habe den Code bearbeitet, aber es funktioniert nicht .. Ich denke, das Onclick-Ereignis bricht die prevent.default ...? –

+0

Der onclick, der inline ist, wird immer zuerst ausgeführt, und es ist nicht wirklich gut, sowohl eine solche Inline-Funktion als auch einen Event-Handler zu haben. Sie sollten das wahrscheinlich überdenken und nur den Event-Handler aufrufen und 'myvalidator aufrufen() 'aus dem externen Event-Handler. – adeneo

+1

viele thx! Ich habe das inzwischen herausgefunden;) aber ich möchte den Kerncode von Virtuemart nicht kaputt machen. Deshalb versuche ich, so zu lösen! –

0

Vergessen Sie nicht, dass es Funktion/Ereignisargumente, aber Sie müssen die Parameter angeben:

$("#thing").click(function(e) { 
    e.preventDefault(); 
}); 

Auf diese Weise wird die Vorlage angehalten, und so kann man es conditionalise.

12

Grundsätzlich, wenn Sie Ihren Button-Typ von type="submit" zu type="button" ändern, wird diese Schaltfläche Formular nicht senden, und keine Problemumgehungen sind erforderlich.

Hoffe, das hilft.

+0

viele thx ... aber ich bin ziemlich sicher, dass das onclick Ereignis schuld ist –

+0

Diese Antwort löste meinen Fall, für mich sollte dies als richtige Antwort markiert werden, da es universeller ist :) großer Dank! –

+0

Ich verwende JQuery-Validierung. Ich habe eine Schaltfläche mit 'type =" button "' aber immer noch das Formular Postbacks, wenn die Validierung fehlschlägt! [Hier] (http://stackoverflow.com/questions/29890544/page-still-postbacks-after-jquery-validation-fail/29890940#29890940) ist meine Frage. – sohaiby

0

Der beste Weg ist, alles in Ihrem Submit-Event-Handler des Formulars zu tun. Entfernen Sie die Inline-Onclick und führen Sie es in der einreichen Funktion

$j('#userForm').submit(function(e) { 
    if (+$j("#zip_field").val() > 1000){ 
     alert('Sorry we leveren alleen inomstreken hijen!'); 
     return false; 
    } 
    return myValidator(userForm, 'savecartuser'); 
}); 
-2

Ich glaube, es ist ein einfacher Weg:

$j('form#userForm .button').click(function(event) { // <- goes here ! 
    if (parseInt($j("#zip_field").val(), 10) > 1000){ 
     event.stopPropagation(); 
    } 
});