1

性別が女性に設定されている場合gender?に有効にするフィールドがあります。is Pregnant?

次に、is Pregnant?フィールドが未回答の場合、無効としてフラグが立てられます。

戻っgender?てMALEに設定した場合、検証はis Pregnant?無効であるにもかかわらず、無効としてフラグが立てられますdisabled

jQueryはdisabledフィールドが無視されると言います。私も試しました: jquery.validate検証無効フィールド

ignore: ":hidden"

私は何が欠けていますか?

4

3 に答える 3

3

これは有効な問題です。このマークアップでは

<form>
<div>
    Male:
    <input type="radio" name="gender" value="male" />
    Female:
    <input type="radio" name="gender" value="female" /></div>
<br />
<div>
    Pregnant:
    <input type="radio" name="pregnant" value="yes" />
    Not Pregnant:
    <input type="radio" name="pregnant" value="no" /></div>
<br />
<input type="submit" />
</form>

そしてこのスクリプト

$('[name=gender]').click(function () {
    var disabled = $(this).val() === 'male';
    $('[name=pregnant]').attr('disabled', disabled);

    // UNCOMMENT THIS TO FIX 
    // if ($('[name=pregnant]').hasClass('error')) {
    //    $('form').validate().form();
    // }
});

$('input').addClass('required');

$('form').validate({
    ignore: ":disabled",
    errorPlacement: function (error, element) {
        error.appendTo(element.parent("div"));
    },
    submitHandler: function () {
        alert('form is ok');
    }
});

問題を再現するには:

  • クリック女性
  • 送信をクリック
  • エラーメッセージが表示されます - これは正しいです
  • 男性をクリック - エラーメッセージがまだ表示される
  • 送信をクリック - フォームは有効です

@ioan が言うように、このエラー メッセージは紛らわしいので、試して取り除く必要があります。フォームは有効ですが、エラー メッセージはまだ表示されています。

于 2013-01-18T13:11:22.557 に答える
2

この.validate() ignore:オプションは次のように機能します。

ignore、デフォルト:":hidden"
検証時に無視し、単純に除外する要素。jQuery の not メソッドが使用されるため、受け入れられるすべてnot()のものをこのオプションとして渡すことができます。

http://docs.jquery.com/Plugins/Validation/validate#toptions

実際のデモ: http://jsfiddle.net/us9aE/

HTML:

<form id="myform">   
     <input type="text" name="field" disabled="disabled" /> <br/> 
</form> 

jQuery:

$(document).ready(function() {
    $('#myform').validate({
        ignore: ":disabled"
    });
});

より具体的なヘルプが必要な場合は、関連する HTML と jQuery を示し、必要に応じて jsFiddle デモを作成してください。

于 2013-01-18T00:13:28.580 に答える
0

無効にされたフィールドは検証フェーズでは無視されますが、フィールドが無効になる前に検証フェーズが実行されると、エラーメッセージが表示されたままになります。

検証エラーをクリーンアップしてフォームを再検証することで、検証メッセージを削除することができます。

于 2013-01-17T13:18:33.347 に答える