我有一个复选框和一个下拉列表,我试图检查如果勾选了复选框,则从下拉列表中选择了一个值。这工作正常,但如果弹出警报消息,我单击确定删除消息,它退出我所在的页面。我想在页面上说同样的,我不知道为什么它将我重定向到其他地方。如果可能的话,我希望如果出现错误消息ErrorMessage = "Please select"
而不是警告框,但这不是主要问题。
<tr>
<td class="Header">License Type</td>
<td></td>
<td>
<asp:DropDownList runat="server" ID="ddlHazLicenseType" CausesValidation="true" >
</asp:DropDownList>
<asp:CustomValidator id="CustomValidator2" runat="server"
ControlToValidate = "ddlHazLicenseType"
ErrorMessage = "Please select"
ValidateEmptyText="True"
ClientValidationFunction="validateHazLicenceType" >
</asp:CustomValidator>
</td>
</tr>
function validateHazLicenceType()
{
if (document.getElementById("<%=chkHazTrained.ClientID %>").checked)
{
var ddl = document.getElementById("ddlHazLicenseType");
var selectedValue = ddl.options[ddl.selectedIndex].value;
if ($("#ddlHazLicenseType")[0].selectedIndex <= 0)
{
alert("Please select a licence type");
}
}
}
答案 0 :(得分:0)
自从我上次使用asp以来已经有一段时间了,看到实际的源码(html)代码会很高兴。无论如何,我想到了两件事:
1)你的验证js函数最后会返回false 会发生什么情况是您的验证函数假定验证通过,并在此之后提交。返回false会阻止这种情况发生(好的一面要知道:返回false意味着你停止默认操作并停止事件传播)
2)您提交的DDL onchange可能会以某种方式开启
答案 1 :(得分:0)
尝试类似
的内容function validateHazLicenceType(oSrc, args) {
if (document.getElementById("<%=chkHazTrained.ClientID %>").checked) {
var ddl = document.getElementById("<%=ddlHazLicenseType.ClientID %>");
if (ddl.selectedIndex <= 0) {
args.IsValid = false
}
}
}
CausesValidation="true"
似乎只会在所选索引发生更改时导致验证 - 这意味着如果初始选择是索引0,并且用户从不更改它,则它将不会按预期进行验证。您可以尝试将DDL的选定索引设置为-1(因此未选择任何内容),但我认为这不能解决问题。您可能必须在其他地方验证DDL值 - 也许在提交时?