2017-10-20 11 views
0

フォームがあり、パスワードフィールドが入力されているかどうかを検証するために非表示入力を取得する際に問題が発生します。jQuery他のフィールドに値がある場合にのみ非表示の入力を検証する

<div class="form-group"> 
    <label for="password" class="control-label col-sm-4">Password: </label> 
    <div class="col-lg-6"> 
     <input type="password" placeholder="Your Password" id="password" name="password" class="form-control" autocomplete="off"> 
    </div> 
</div> 

<div class="form-group"> 
    <label class="control-label col-sm-4">Password Strength</label> 
    <div class="col-sm-6" id="password-meter"> 
     <div class="progress"> 
      <div class="progress-bar" id="password-meter-progress"></div> 
      <input type="hidden" name="password_strength" id="password_strength"> 
     </div> 
    </div> 
</div> 

<div class="form-group"> 
    <label for="confirm_password" class="control-label col-sm-4">Confirm Password: </label> 
    <div class="col-lg-6"> 
     <input type="password" placeholder="Confirm Password" id="confirm_password" name="confirm_password" class="form-control" autocomplete="off"> 
    </div> 
</div> 

このようなボタンをクリックすると、何もしません。私はv.errorListをログアウトしようとしましたが、そこに何も表示されません。ここ

$('#button').click(function() { 
    if (v.form()) { 
     $('.frm').hide('fast'); 
     $('#sf2').show('slow'); 
    } 
}); 

は私の検証コード

function isPasswordPresent() { 
    return $('#password').val() !== ''; 
} 
var v = $('#onboardingform').validate({ 
    ignore: [], 
    rules: { 
     password: { 
      required: true, 
      minlength: 6, 
     }, 
     confirm_password: { 
      required: true, 
      minlength: 6, 
      equalTo: "#password", 
     }, 
     password_strength: { 
      min: { 
       depends: isPasswordPresent, 
       param: 60 
      } 
     } 
    }, 
    messages: { 
     password_strength: { 
      min: 'Enter a strong password' 
     } 
    }, 
    errorElement: "span", 
    errorClass: "help-inline", 
}); 
+0

わからない、あなたのすべてのコードが含まれている場合は、あなたが持っている場合は、ボタンでをターゲットにしていますボタンのidですが、そのidのボタンはありません。クリックイベント内のフォームについても同様です。 –

+0

これは問題ではありません。私は問題が無視されていることを発見しました:[] ,.私が削除した場合、フォームは有効であるが、従属ルールは機能しなくなる –

+0

それは意味をなさない。 'ignore:[]'は単に何も無視することを意味します。隠しフィールドを検証します。 – Sparky

答えて

0

引用commentです:

「私は問題がである発見ignore: []、。フォームを削除するとフォームは有効であるが、従属ルールは機能しなくなる "

これは意味をなさない。 ignore: []は単に何も無視することを意味します。すべての非表示フィールドを含むすべてのフィールドを検証します。タイトルに示されているように、非表示フィールドを検証する場合は、[]など、ignoreオプションを適切に設定する必要があります。


また、フィールドに値が含まれているかどうかをテストする外部関数を記述する必要はありません。このプラグインには:filled:blankセレクタが用意されています。

を入力して入力してください。!$('#password').is(':blank')を入力して空白でないことを確認することもできます。

password_strength: { 
    min: { 
     depends: function(element) { 
      return $('#password').is(':filled'); 
      // return !$('#password').is(':blank'); 
     }, 
     param: 60 
    } 
} 

参照してください:jqueryvalidation.org/category/selectors/

概念実証デモjsfiddle.net/g6hq8o7y/

関連する問題