it-swarm.com.de

Verhindern Sie, dass die Schaltfläche "Senden" mit dem Ereignis "onclick" gesendet wird

Ich möchte verhindern, dass ein Senden-Button mit dem Ereignis "onclick" gesendet wird:

$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 der Senden-Button:

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

Es wird die "Alert" -Funktion angezeigt und das Onclick-Ereignis entfernt. Das Formular wird jedoch trotzdem gesendet. Entfernen Sie das Onclick-Ereignis vor dem Senden manuell, um das Problem zu lösen. Dies ist jedoch die Kernfunktion von und ich möchte sie nicht entfernen.

BEARBEITEN:

Dies ist definitiv durch den Onclick-Selektor bedingt. Wie kann ich mein jQuery-Skript zwingen, das Onclick-Ereignis sofort neu zu laden? Hinzufügen von Code vor jquery: $j('form#userForm .button').attr('onclick',''); löst das Problem .. meine Validierung funktioniert jedoch nicht mehr ...

10
Coen Ponsen

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

$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!');
    }   
});

Außerdem gibt val() immer einen String zurück. Es empfiehlt sich daher, ihn in eine Zahl umzuwandeln, bevor Sie ihn mit einer Zahl vergleichen. Ich bin mir nicht sicher, ob Sie wirklich alle .button als Ziel angeben. Elemente innerhalb von #userForm innerhalb der Funktion, oder sollten Sie stattdessen this verwenden?

Wenn Sie jQuery 1.7+ verwenden, sollten Sie in Betracht ziehen, hierfür on() und off() zu verwenden.

22
adeneo

Wenn Sie Ihren Tastentyp von type="submit" in type="button" ändern, wird diese Schaltfläche grundsätzlich nicht gesendet, und es sind keine Problemumgehungen erforderlich.

Hoffe das hilft. 

13
lxgreen

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

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

Auf diese Weise wird die Einreichung angehalten und Sie können sie konditionieren.

1
Grant Thomas

Am besten tun Sie alles in Ihrem Submit-Event-Handler des Formulars. Entfernen Sie den Inline-Onclick und führen Sie ihn in der Submit-Funktion aus

$j('#userForm').submit(function(e) {
    if (+$j("#Zip_field").val() > 1000){
        alert('Sorry we leveren alleen inomstreken hijen!');
        return false;
    }
    return myValidator(userForm, 'savecartuser');
});
0
ᾠῗᵲᄐᶌ