JQuery DatePicker передать переменную из одной функции в другую - PullRequest
0 голосов
/ 05 сентября 2011

Я пытаюсь передать данные, полученные из функции, инициированной onChangeMonthYear, в функцию, инициированную beforeShowDay.Я пробовал различные методы, такие как присвоение данных, полученных из test.php, переменной, объявленной снаружи, но безрезультатно.так что я просто обновил текстовое поле полученными данными из test.php и попросил функцию beforeShowDay получить данные оттуда.вот часть моего кода

$(document).ready(function() {

    $('#datepicker').datepicker({dateFormat: 'dd-mm-yy', currentText: 'Now', changeMonth: true, changeYear: true, altField: '#alternate', altFormat: 'DD, d MM, yy', onSelect:  function(dateText, inst) {}, 
        onChangeMonthYear: function(year,month,inst){
            $.post("test.php", {action: "TEST", month: month, year: year}, 
            function (data){
                $("#datafromphp").val(data);
            }
            ,"html");
        }, 
        beforeShowDay: function (date){
            var getdatafromphp= $("#datafromphp").val();

        }
    });
});

наверняка есть лучший способ сделать это?

1 Ответ

2 голосов
/ 05 сентября 2011

Если я вас правильно понимаю, вы хотите асинхронно получить некоторые данные через AJAX в onChangeMonthYear и сделать их доступными в beforeShowDay для отображения обновленных данных.

Помогает понять порядок звонков. Когда календарь появляется впервые, выполняется набор вызовов на beforeShowDay. На данном этапе еще нет данных от вашего AJAX-вызова (т. Е. От test.php).

После того, как пользователь изменит месяц / год, будет вызван onChangeMonthYear, а затем снова будет сделана группа вызовов на beforeShowDay. На этом этапе все еще не должно быть данных из вашего вызова AJAX, если только вызов AJAX на test.php не сможет вернуться достаточно быстро, чтобы некоторые из вызовов на beforeShowDay могли получить доступ к возвращенному значению.

Затем возвращается вызов AJAX, и возвращенные данные каким-то образом передаются на beforeShowDay для отображения.

Как видите, то, что вы пытались сделать, не сработало бы, поскольку вызов AJAX не был бы вовремя для beforeShowDay сбора данных, даже если вы "правильно" передали его. Что вы хотите сделать, так это назначить возвращенные данные из AJAX где-нибудь, а затем обновить средство выбора даты, чтобы снова вызывался beforeShowDay. Вы можете сохранить данные в произвольном объекте jQuery с помощью .data(). Итак, вы можете сделать что-то вроде этого:

$('#datepicker').data('datafromphp', []).datepicker({dateFormat: 'dd-mm-yy', currentText: 'Now', changeMonth: true, changeYear: true, altField: '#alternate', altFormat: 'DD, d MM, yy', onSelect:  function(dateText, inst) {}, 
    onChangeMonthYear: function(year,month,inst){
        $.post("test.php", {action: "TEST", month: month, year: year}, 
        function (data){
            $("#datepicker").data('datafromphp', data).datepicker('refresh');
        }
        ,"html");
    }, 
    beforeShowDay: function (date){
        var getdatafromphp= $(this).data("datafromphp");

    }
});
...