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>

如您所见,第二点是 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

您应该使用 getElementsbyname["name"]/getElementsbyId["name"],而不是使用 name.Value。这将工作......

于 2012-11-10T09:38:46.287 回答