检查是否从下拉列表中选择了值时,它将退出页面

时间:2015-06-26 16:22:14

标签: javascript jquery asp.net visual-studio

我有一个复选框和一个下拉列表,我试图检查如果勾选了复选框,则从下拉列表中选择了一个值。这工作正常,但如果弹出警报消息,我单击确定删除消息,它退出我所在的页面。我想在页面上说同样的,我不知道为什么它将我重定向到其他地方。如果可能的话,我希望如果出现错误消息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");
                }
        }
    }

2 个答案:

答案 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值 - 也许在提交时?