1

Web アプリにいくつかの検証を構築しようとしていますが、小さな問題が発生しています。ASPドロップダウンリストとテキストボックスがあり、誰かがドロップダウンリストから「その他」を選択した場合にテキストボックスを必須にしたいと考えています。[その他] を選択すると検証が機能しますが、別のオプションを選択して [保存] ボタンをクリックすると、ドロップダウンで選択した値が [その他] でなくても、テキスト ボックスに値を入力するよう求められます。

これが私のjquery関数です:

$(function() {

    $("#btnMainSave").click(function() {

        val = $('#ddlRefTo').val();
        alert(val);
        $("#form1").validate({

            rules: {

                txbRefToOther: val == "Other" ? "required" : "notrequired",
                txbRefConcern: "required"

            },
            messages: {
                txbRefConcern: "*This field is mandatory",
                txbRefToOther: "*This field is mandatory"

            },

            ignore: ""
        });
    });
});

アラートは、値の変更が検出されていることを示していますが、何らかの理由で、検証部分は、val=「その他」とは異なるものであっても、テキストボックスに値を入力することを主張しています。

どんな助けでも大歓迎です。ありがとう

アップデート

カスタム検証をいじってみましたが、まだいくつかの問題があります。これが私のカスタム検証方法です:

$.validator.addMethod("Test", function(value, element) {

        var val = $('#ddlRefTo').val();

        if (value.length==0 && val=="Other") {

            //INVALID
            return false;
        }
        // VALID
        else return true;
    },
             "*This field is required.");

そして、私はそれを次のように言及しています:

$("#form1").validate({
        rules: {
            txbRefToOther: {
                required: true,
                Test: true

            }
        }
    });

ただし、送信するとすぐに、ドロップダウンで何が選択されていても検証エラーがトリガーされ、テキストボックスに何かを入力したときにのみ停止します。

ただし、次のように、テキストボックスではなくドロップダウンで検証を設定した場合:

$.validator.addMethod("Test", function(value, element) {

  if (value=="Other" && $('#txbRefToOther').val()=="") {

              //INVALID
               return false; 
           }
           // VALID
          else return true; 
            },
             "*This field is required.");

$("#form1").validate({
          rules: {
                ddlRefTo:{
                            required: true,
                           Test: true

                        }
                    }
        });

思い通りに動作しますが、代わりにドロップダウンリストにエラーメッセージが表示されます! 最初のバージョンが機能しないのはなぜですか? それが役立つ場合、私のHTMLは次のとおりです。

<script type="text/javascript" src="http://code.jquery.com/jquery-1.9.1.js"></script>
<script type="text/javascript" src="http://code.jquery.com/ui/1.10.3/jquery-ui.js"></script>

<script  type="text/javascript" src="http://jquery.bassistance.de/validate/jquery.validate.js"></script>
<script type="text/javascript" src="http://jquery.bassistance.de/validate/additional-methods.js"></script>
......
......
<table width="530">
<tr>
<td class="Label" width="80">Referring to</td>
<td width="120"><asp:DropDownList id="ddlRefTo" runat="server" CssClass="textbox" Font-Size="9pt" Width="110">
        <asp:ListItem Text="Test1" Value="Test1"></asp:ListItem>
        <asp:ListItem Text="Test2" Value="Test2"></asp:ListItem>
        <asp:ListItem Text="Test3" Value="Test3"></asp:ListItem>
        <asp:ListItem Text="Other" Value="Other"></asp:ListItem>
</asp:DropDownList>

</td>
<td class="Label" align="right" width="170">If 'Other', Please specify</td>
<td><asp:TextBox ID="txbRefToOther" runat="server" CssClass="textbox" Width="150"></asp:TextBox></td>
</tr>
</table>
<asp:Button ID="submit" runat="server" Text="Click" />
4

1 に答える 1

1

メッセージを必要な検証のみに設定してみてください。

messages:{
    txtRefToOther:{
        required: "*This field is mandatory"
    }

また、必須ではないものは何ですか?カスタムメソッドとして定義されていることを確認してください。


あなたのコメントに基づいて、この検証を処理するカスタム メソッドを追加するのが最善の策だと思います。カスタムメソッドは次のとおりです。

 jQuery.validator.addMethod("conditionallyRequired", function (value, element, params) {
    if ($("'#" + params + "'").val() == "Other") && value == ''{
         return false; //INVALID
    }
    return true; // VALID
}, "*This field is required." //VALIDATION MESSAGE      
);

// connect it to a css class 
jQuery.validator.addClassRules({
    conditionallyRequired: { conditionallyRequired: true }
});

このメソッドは、ddlRefTo が「その他」であるかどうか、およびこのテキスト ボックスが空白であるかどうかを確認します。はいの場合、false - 無効を返します。メソッドをテキストボックスに適用します。

txtRefToOther:
{
    conditionallyRequired: ddlRefTo
}
于 2013-07-11T13:17:36.163 に答える