require([ "jquery", "mage/validation", "mage/translate" ], function($){ $.each({ 'validate-custom': [ function (value, element, params) { var isVaild = false; return isVaild; }, 'message: hello world.' ] }, function (i, rule) { rule.unshift(i); $.validator.addMethod.apply($.validator, rule); }); });
元素調用javascript
<form class="form" data-mage-init='{"validation":{}}'> <input type="text" data-validate="{required:true, 'validate-custom':true}"/> </form>
<input type="text" data-validate="{required:true, remote:'ajax.php'}"/>
ajax.php要返回json的'true'表示驗證成功,不然返回提交信息。如下爲例:php
echo \Zend_Json(true); echo \Zend_Json('message');
validation是jquery plugin,因此在knockoutjs template裏添加 data-mage-init='{"validation":{}}'>
不會有效,須要使用knockoutjs custom bingings方案,官方參考文檔:http://knockoutjs.com/documen...html
form.jsjava
define( ['ko', 'jquery', 'uiComponent', 'mage/validation'], function (ko, $, Component) { 'use strict'; ko.bindingHandlers.validation = { init: function(element, valueAccessor) { if(valueAccessor()) { $(element).validation(); } } }; return Component.extend({ defaults: { template: 'Vendor_Module/form', name: '' }, /** Initialize observable properties */ initObservable: function () { this._super() .observe('name'); return this; } }); } );
form.htmljquery
<form method="post" data-bind="validation: true"> <div class="field required"> <label class="label" for="name"> <span>Name:</span> </label> <div class="control"> <input id="name" type="text" class="input-text" data-validate="{required:true}" /> </div> </div> <input type="submit" class="action primary black" value="Submit" /> </form>
能夠編寫errorPlacement函數來肯定信息位置,mage有默認的errorPlacement,即input父級.addon元素的父級元素裏面顯示提示,如下爲例:ajax
<div> <div class="addon"> <input type="text" data-validate="{required:true, 'validate-custom':true}"/> </div> <!-- 將會在這裏提示 --> </div>
要注意有沒有mixins,mage的一些mixins會重寫errorPlacement,讓以上位置失效。例如 Magento_CustomerCustomAttributes/error-placement 就會讓addon失效。json
mage/validation 默認會捕抓form submit執行時進行表單驗證,但有些比較複雜的狀況,須要javascript自主觸發表單驗證,可用如下方式:app
require([ "jquery", "mage/validation" ], function($){ var $form = $('#form-xxxx'); $form.validation(); if(!$form.valid()) { // 若是驗證失敗 } });