web-dev-qa-db-ja.com

送信フォームなしでパセリ検証をトリガーしますか?

このコードを考えると、それは決して機能せず、常に真を返しますか?

<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>

だから私の質問は、送信ボタンを追加せずにパセリ検証をトリガーする方法があるかどうかです?

24
Hoan Dang

$form.parsley('validate')は1.x APIです。使用する可能性のある2.xバージョンでは廃止されました。

代わりに$form.parsley().validate()を試してください。

ベスト

47
guillaumepotier

フォームの検証を非フォームタグで機能させるために、私は高低を検索してきました。フレームワークに対する私の最大の不満は、フォーム以外の要素ではすぐに動作しないことです。検証を試みるたびにページの最上部までスクロールしなければ、フォーム要素を使用しても問題ありません。この動作はフォームの動作に固有のものであるため、修正するのはこのハックのみです。

補足として、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();
});
4
Justin Muller

type = "button"をボタンに配置した場合、クリックしてもページは更新されず、ページの上部にスクロールします。

0
silly_girl