Magento 2: Js Formularvalidierung ohne Senden auslösen

8

Auf einer benutzerdefinierten Frontend-Seite habe ich ein Formular, in dem ich die js-Validierung von magento verwende, um Eingaben zu validieren: Name, E-Mail-Beschreibung usw. Wenn das Formular gesendet wird, wird die Validierung ausgelöst und funktioniert ordnungsgemäß. Ich frage mich, ob es eine Möglichkeit gibt, die js-Validierung von magento manuell aufzurufen, ohne dass eine "Senden" -Aktion erforderlich ist.

Hier ist, was ich verwende, um die Validierung anzuwenden

var dataForm = $('#form-validate');
var ignore = null;
dataForm.mage('validation', {
    ignore: ignore ? ':hidden:not(' + ignore + ')' : ':hidden'
}).find('input:text').attr('autocomplete', 'off');

und ich suche

$("#form-validate").mageValidate();  // validate form fields

Lassen Sie mich wissen, wenn Sie weitere Details benötigen.

Xenocide8998
quelle
Ich habe versucht, zu mage/validation$('#form-validate').validation();
fordern

Antworten:

30

konnte dies durch Bezugnahme herausfinden:

module-checkout-agreements/view/frontend/web/js/model/agreement-validator.js

Nach dem Einfügen müssen mage/validationSie ein Argument isValidan mage.validation übergeben, um die Validierung aufzurufen

Vollständiger Code sieht aus wie

require([
    'jquery',
    'mage/validation'
], function($){

    var dataForm = $('#form-validate');
    var ignore = null;

    dataForm.mage('validation', {
        ignore: ignore ? ':hidden:not(' + ignore + ')' : ':hidden'
    }).find('input:text').attr('autocomplete', 'off');

    $('button#my-button').click( function() { //can be replaced with any event
        dataForm.validation('isValid'); //validates form and returns boolean
    });
});

Sie können das Argument auch durch ersetzen clearError, um Validierungsfehlermeldungen zu entfernen

Xenocide8998
quelle
Es wird folgender Fehler ausgegeben: Nicht erfasster Fehler: Bei der Validierung vor der Initialisierung können keine Methoden aufgerufen werden. versucht, Methode 'isValid' aufzurufen
Krishnan Daiva
Versuchen Sie, data-mage-init='{"validation":{}}'dem Formular ein Attribut hinzuzufügen. Überprüfen Sie außerdem, ob Ihre Formularauswahl korrekt ist.
Xenocide8998
2

Sie können dies versuchen:

require(["jquery"], function ($) {
    $(document).ready(function () {
        $('#my-button-name').click(function () { // The button type should be "button" and not submit
            if ($('#form-name').valid()) {
                alert("Validation pass");
                return false;
            }else{
                alert("Validation failed");
                return false;
            }
        });
    });
});

Hoffe das kann dir helfen!

Kazim Noorani
quelle
if ($ ('# form-name'). valid ()) das funktioniert bei mir nicht
Jaisa
Fehler wie diesen anzeigen jquery.validate.js: 111 Nicht gefangener TypError: Eigenschaft 'form' von undefined kann nicht gelesen werden
Jaisa
if ($ ('# form-id'). valid () === false) {return false; }; ist schön.
Manish Goswami