jquery datepicker将变量从一个函数传递给另一个函数

时间:2011-09-05 01:26:32

标签: jquery jquery-ui jquery-ui-datepicker

我正在尝试将我从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 个答案:

答案 0 :(得分:2)

如果我理解正确,你想在onChangeMonthYear中异步地通过AJAX获取一些数据,并在beforeShowDay中访问它以显示更新的数据。

有助于理解通话的顺序。当日历首次出现时,会对beforeShowDay进行一连串调用。在此阶段,您的AJAX调用尚未提供数据(即来自test.php)。

用户更改月份/年后,系统会调用onChangeMonthYear,然后再次向beforeShowDay发出一堆电话。在这个阶段,你的AJAX调用仍然没有数据,除非对test.php的AJAX调用设法足够快地返回到beforeShowDay的某些调用来访问返回的值。

然后AJAX调用返回,返回的数据以某种方式传递给beforeShowDay以显示。

正如您所看到的,您尝试做的事情将无法正常工作,因为即使您正确地“传递”了AJAX调用,beforeShowDay也无法及时获取数据。你想要做的是,从某处的AJAX分配返回的数据,然后刷新datepicker,这样就会再次调用beforeShowDay。您可以使用.data()将数据存储到任意jQuery对象。所以,你可以这样做:

$('#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");

    }
});