SetFocusOnError для CustomValidator не работает - PullRequest
0 голосов
/ 08 декабря 2011

У меня есть некоторые элементы управления с CustomValidators, как показано ниже.Однако SetFocusOnError не работает, страница не переходит к первому элементу управления, если проверка не пройдена.Я мог бы установить фокус в javascript, но проблема с ним в том, что всегда последний, недействительный элемент управления получает фокус, а это не то, чего я хочу, я хочу, чтобы первый недопустимый элемент управления получал фокус.

Может кто-нибудь сказать мне, как это исправить?Спасибо.

function ValidateRootCause(source, args) {
    var status = document.getElementById("<%=statusDropDownList.ClientID %>");
    var RootCause = document.getElementById("<%=txtRootCause.ClientID %>");

    args.IsValid = true;
    if (RootCause.value == "" && (status.value == 21 || status.value == 18)) {
        args.IsValid = false;
        RootCause.focus();
    }
}

        <tr>
            <td width="45%">Root Cause (Why it Happens)<span class="littlefont">*</span>                
            <asp:CustomValidator ID="cvRootCause" runat="server" 
                    ErrorMessage="Required Field!" CssClass="warning" 
                    ClientValidationFunction="ValidateRootCause" ValidationGroup="formValidation" SetFocusOnError="True">
            </asp:CustomValidator>
            </td>
            <td width="55%">

                <asp:TextBox ID="txtRootCause" runat="server" TextMode="MultiLine" 
                    MaxLength="1000"></asp:TextBox>
            </td>
        </tr>

1 Ответ

1 голос
/ 08 декабря 2011

Создайте глобальную (вне вашей функции) переменную JavaScript с именем focusGiven или что-то в этом роде. В вашем if () оберните другой if () вокруг вашего фокус-вызова. Таким образом, это произойдет только один раз.

var focusGiven = false;
function ValidateRootCause(source, args) {
    var status = document.getElementById("<%=statusDropDownList.ClientID %>");
    var RootCause = document.getElementById("<%=txtRootCause.ClientID %>");

    args.IsValid = true;
    if (RootCause.value == "" && (status.value == 21 || status.value == 18)) {
        args.IsValid = false;

        if (!focusGiven) {
            RootCause.focus();
            focusGiven = true;
        }
    }
}
...