He definido una serie de validadores de Parsley personalizados como:
Parsley.addValidator('example', { validateString: function(value, id=0) { var max_length = 25 var regex = /^[AZ][az]+$/ if (value.length > max_length) { return $.Deferred().reject(`Example <b>${value}</b> is longer than ${max_length} characters.`); } if (!regex.test(value)) { return $.Deferred().reject(`Example <b>${value}</b> must match regex <b>${regex}</b>.`); } return $.ajax({ type: "GET", url: "/rest/api/example", data: { ratio: value }, dataType: 'json' }).then(function(response) { if (!response) { return $.Deferred().reject("There was an error retrieving example."); } if (response.length > 0) { if ((id <= 0) || (response[0].id != id)) { return $.Deferred().reject(`Example<b>${value}</b> is already in use.`); } } }) } });Esta validación funciona como se esperaba cuando se usa la etiqueta HTML data-parsley-example en una entrada como:
<input type="text" class="input" id="example" placeholder="Example" data-parsley-trigger="change" data-parsley-example="">¿Hay alguna forma admitida de ejecutar esta verificación de validación en un método independiente? Lo siguiente parece funcionar pero usa el _validatorRegistry privado:
Parsley._validatorRegistry["validators"].example.validate(value)Esto es similar a ¿Cómo llamo a un validador de perejil incorporado desde javascript? pero las soluciones recomendadas no parecen funcionar para mí.
No hay API o eso, pero puede llamarlo en DOM virtual, por ejemplo
$('<input data-parsley-example="">') .parsley() .whenValid({value}) .then(result => {...})