0

カスタムバリデーターを使用したMasterPageで検索エンジンの入力ボックスを検証しようとしていますが、検証せず、代わりに検索結果に移動します。デフォルトでは、入力ボックスの値は「Name ...」であるため、検索時に「Name...」で検索します。

また、お問い合わせページに送信ボタンがあります。ボタンを押すと、上記の検索機能とは関係なく、上記の検証が行われます。参照用の私のコードは次のとおりです。:-

<script>
function nameNull(oSrc, args) {
            if (name.Value.Trim() == "Name..." || name.Value.Trim() == "") {
                args.IsValid = false;
            }
            else {
                args.IsValid = true;
            }
        }
</script>

<input type="text" id="name" runat="server" value="Name..." name="name" onblur="doDefault(this)" onfocus="doClear(this)" />
<asp:CustomValidator ID="CustomValidator1" runat="server" ErrorMessage="Please enter  name"
ControlToValidate="name" ClientValidationFunction="nameNull"
ForeColor="#FF3300" Font-Bold="True"></asp:CustomValidator>
4

2 に答える 2

1

最初に、ID で HTML 要素にアクセスしようとします。要素を取得するには、document.getElementById JS メソッドを使用する必要があります。

次に、入力フィールドを runat="server" 属性でマークしました。これにより、ASP.NET は、ASP.NET マークアップで指定した ID とは異なる ClientID をレンダリングします。したがって、要素にアクセスするには、サーバー コントロールの ClientID 値を使用する必要があります。

<script type="text/javascript">
    function nameNull(oSrc, args) {
        var element = document.getElementById('<%= this.name.ClientID %>');
        var value = element.value.trim();

        if (value == "Name...") {
            args.IsValid = false;
        }
        else {
            args.IsValid = true;
        }
    }
</script>

2 番目のポイントは、JavaScript では大文字と小文字が区別されるため、 value.trim();を使用する必要があることです。.

最後に、要素に少なくとも値があることを確認するには、必須フィールドバリデーターを使用することをお勧めします。したがって、マークアップを次のように変更する必要があります。

<input type="text" id="name" runat="server" value="Name..." name="name" />
<asp:RequiredFieldValidator ID="NameFieldRequiredFieldValidator" ErrorMessage="Please enter  name" ControlToValidate="name" />
<asp:CustomValidator ID="CustomValidator1" runat="server" ErrorMessage="Please enter  name" ControlToValidate="name" ClientValidationFunction="nameNull"
    ForeColor="#FF3300" Font-Bold="True"></asp:CustomValidator>
于 2012-11-10T10:40:50.937 に答える
0

name.Value を使用する代わりに、getElementsbyname["name"]/getElementsbyId["name"] を使用する必要があります。これはうまくいきます.....

于 2012-11-10T09:38:46.287 に答える