jQuery DatePicker предотвращает ввод на других элементах управления

0

Я хочу предотвратить ввод других элементов управления, чем активный jQuery DatePicker (активный datepicker = фокус на его текстовое поле или открыть календарь), пока я не проверил дату со сценарием.

Я пытался сделать это, предотвращая размытие, которое отлично работает, когда вы выходите из поля. Но когда, например, пользователь нажимает флажок, этот флажок будет отмечен/снят до того, как событие размытия будет запущено в текстовом поле DatePicker.

Это был мой первоначальный план с помощью валидаторов asp.net (пользовательский валидатор для допустимых дат и пользовательский валидатор для проверки daterange):

$('#myCalendar').blur(function(){
    return Page_ClientValidate('myValidationGroup');
});

Как я могу предотвратить ввод на других элементах управления, пока выбранная/введенная дата недействительна, не помещая проверки на другие элементы управления? Я предпочитаю не отключать все остальные элементы управления.

Обновление. Кажется, что предупреждение будет отменять событие на другом элементе управления. Теперь, почему это так, и могу ли я использовать это в своих интересах таким образом, чтобы не требовалось предупреждение?

  • 0
    я думаю, событие blur срабатывает в первую очередь, чем событие click . пожалуйста, посмотрите на jsfiddle: jsfiddle.net/bSfT2
  • 0
    @Mohit Мохит, кажется, ты прав. Но почему состояние моего флажка все еще изменяется, когда Page_ClientValidate возвращает false?
Теги:
validation
datepicker

2 ответа

0

Событие размытия не пузырится в Internet Explorer. Поэтому скрипты, которые полагаются на делегирование событий с событием размытия, не будут работать последовательно в браузерах. Начиная с версии 1.4.2, jQuery работает вокруг этого ограничения, сопоставляя размытие с событием фокуса в своих методах делегирования событий.live() и.delegate().

Это из документации jquery api.

Вы пробовали использовать пользовательский валидатор на стороне клиента?

Мы помещаем этот код в наш глобальный файл core.js.

function dateValidator(source, arguments) {
    var d = new Date(arguments.Value);
    return arguments.IsValid = !isNaN(d.valueOf());
}

затем используйте пользовательский валидатор, вызывающий скрипт.

<asp:CustomValidator ID="cvInstallationDate" runat="server" Display="Dynamic" ErrorMessage="Invalid Installation Date."
                            ControlToValidate ="txtInstallationDate" EnableClientScript="true" ClientValidationFunction ="dateValidator">
                            <img src='/Images/WarningIcon.png' width='16' height='16' title='Invalid Installation Date' />
</asp:CustomValidator>
  • 0
    Я использую пользовательский валидатор, но это не мешает пользователям щелкать другие элементы управления (на которых может быть включен автостоп).
0

Это так же хорошо, как я могу получить его сам, теперь достаточно:

$(document).ready(function () {
    $("input.DatePicker:text").on("blur.MyNamespace", function () { return dp_FireValidators(this, null); });
});

var rewriteHandlers = 'click.MyNamespace, dblclick.MyNamespace, change.MyNamespace, focusin.MyNamespace, keydown.MyNamespace, keypress.MyNamespace, mousedown.MyNamespace';
function dp_FireValidators(sender, args) {
    $(sender).removeClass('CalenderInvalidDate');

    if (sender.Validators.length > 0) {
        var vGroup = sender.Validators[0].validationGroup;

        if (vGroup == undefined)
            Page_ClientValidate();
        else
            Page_ClientValidate(vGroup);

        for (var i = 0; i < sender.Validators.length; i++) {
            if (!sender.Validators[i].isvalid) {
                dp_PreventChangesWhileDateIncorrect();
                $(sender).addClass('CalenderInvalidDate');
                $(sender).focus();
                return false;
            }
        }
    }

    $("input:checkbox, select").off(rewriteHandlers);

    return true;
}

function dp_PreventChangesWhileDateIncorrect() {
    $("input:checkbox, select").on(rewriteHandlers, function (e) {
        e.preventDefault();
        return false;
    });
}

Только dblclick на флажке в IE проскользнет.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню