Остановить отображение даты в jquery-ui перед beforeShow - PullRequest
4 голосов
/ 06 июля 2011

Я хочу сделать что-то вроде этого:

var showme = false;

$('#mydatepicker').datepicker({
    beforeShow: function(input, inst) {
        if(!showme) {
            //stop showing
        }
    }
});

Но кажется, что отключить или скрыть работает.Я хотел бы сделать что-то, что работает как protectDefault, но я не думаю, что это будет работать в этом случае.

Ответы [ 6 ]

7 голосов
/ 24 июля 2012

У меня был тот же вопрос, и я обнаружил, что теперь вы можете использовать return false; для предотвращения отображения календаря.

$('#mydatepicker').datepicker({
    beforeShow: function(input, inst) {
        if(!showme) {
            return false;
        }
    }
});

Я использую версию 1.7.2 jQuery UI

3 голосов
/ 06 июля 2011

Просматривая источник, кажется, что это невозможно в настоящее время.Вы можете запросить это как функцию.Если вы действительно хотите остановить его (хотя это, вероятно, плохая идея), вы можете выдать ошибку в этой функции.Хотя это приведет к появлению ошибок на вашей странице и, вероятно, не будет возможным.


Примечание : я отправил патч для этого, и теперь он находится в выпущенном пользовательском интерфейсе jQuery (на минимум v1.9 и выше), хотя в документации это не упоминается.return false в beforeShow предотвратит появление средства выбора даты (сейчас).

1 голос
/ 14 августа 2012

Лучший способ запретить открытие DatePicker - использовать следующую функцию в beforeShow:

$("#datepicker").datepicker("close");

это заставляет DatePicker закрываться еще до того, как его показывают.

1 голос
/ 06 июля 2011

Может быть лучше просто управлять отображением средства выбора даты с помощью параметров метода disable и enable .

$('#mydatepicker').datepicker('disable'); //Don't show datepicker 

$('#mydatepicker').datepicker('enable'); //Show datepicker

Казалось бы, для достижения той же цели, которую вы ищете.

0 голосов
/ 26 июня 2012

Поскольку этот патч не был объединен, я смог придумать хак, который работает довольно хорошо. Дайте мне знать, что вы думаете:

beforeShow: function(){
    var start = $('#dtFrom').val()
    if($.trim(start)!=''){
        start = $('#dtFrom').datepicker('getDate');
        $('#DateToDisplay').datepicker('option', 'minDate', new Date(start.getTime()));
    }
},
    onClose: function() {
    var start = $('#dtFrom').val()
    if($.trim(start)==''){
        alert('Error! Please select a start date\/time prior to setting the date to display.');
        $('#DateToDisplay').val('')
    }
}
0 голосов
/ 06 июля 2011

Кажется, я тоже ближе всего, но я не хочу использовать здесь setTimeout, это выглядит немного странно:

        var showme = false;

        $('#mydatepicker').datepicker({
            beforeShow: function (input, inst) {

                if (!showme) {

                    setTimeout(function () { $(input).datepicker("hide"); }, 1);

                }
            }
        });
...