このコードを考えると、それは決して機能せず、常に真を返しますか?
<form id="my-form" data-validate="parsley">
<p>
<label for="username">Username * :</label>
<input type="text" id="username" name="username" data-required="true" >
</p>
<p>
<label for="email">Email Address * :</label>
<input type="text" id="email" name="email" data-required="true" >
</p>
<br/>
<!-- Validate all the form fields by clicking this button -->
<a class="btn btn-danger" id="validate" >Validate All</a>
</form>
<script>
var $form = $('#my-form');
$('#validate').click (function () {
if ( $form.parsley('validate') )
console.log ( 'valid' ); <-- always goes here
else
console.log ('invalid');
});
</script>
だから私の質問は、送信ボタンを追加せずにパセリ検証をトリガーする方法があるかどうかです?
$form.parsley('validate')
は1.x APIです。使用する可能性のある2.xバージョンでは廃止されました。
代わりに$form.parsley().validate()
を試してください。
ベスト
フォームの検証を非フォームタグで機能させるために、私は高低を検索してきました。フレームワークに対する私の最大の不満は、フォーム以外の要素ではすぐに動作しないことです。検証を試みるたびにページの最上部までスクロールしなければ、フォーム要素を使用しても問題ありません。この動作はフォームの動作に固有のものであるため、修正するのはこのハックのみです。
補足として、divタグでdata-parsley-validate属性を使用しても機能します。フォームを通常どおり初期化することもできます(検証にサブスクライブできることを意味します)。
htmlの例:
<div id="signupForm" data-parsley-validate>
... put form inputs here ...
<button id="signupBtn">Sign me up</button>
</div>
必ずjsを入れてください:
var $selector = $('#signupForm'),
form = $selector.parsley();
form.subscribe('parsley:form:success', function (e) {
...
});
$selector.find('button').click(function () {
form.validate();
});
type = "button"をボタンに配置した場合、クリックしてもページは更新されず、ページの上部にスクロールします。