jQuery datepicker calendar - 调用函数更新数据库

时间:2010-05-14 18:46:16

标签: jquery datepicker

所以我使用datepicker插件制作可用性日历。这是我的javascript: http://pastebin.com/H7D9PcAg

当调用dpSetSelected()时,它也调用dateSelected(),它触发对我的PHP脚本的AJAX调用。我需要一种方法来只更新数据库,如果点击日期而不是预先加载。当我预先加载日期时,它们会被发送到PHP页面并随后被删除。

2 个答案:

答案 0 :(得分:2)

为什么不将AJAX调用绑定到change函数而不是dateSelected?这样,当预先加载日期时,不会发生任何事情,但如果您通过单击更改日期,它将会触发。这似乎在我实施的日期选择器上工作正常:

$("#startDate, #endDate")
    .datepicker({
        showOn: 'button',
        buttonImage: '/images/icon_calendar.png',
        duration: 0 })
    .change(function() {
        //do stuff
    });

因此,使用您的代码更改以下内容:

.bind(  'dateSelected', function(e, selectedDate, $td, state) {
    $("#info").load("test1.php?date="+encodeURIComponent(selectedDate)+"&land-id="+<? =$_GET['eid'];?>);
  });

为:

.change(function() {
    $("#info").load("test1.php?date="+$(this).val()+"&land-id="+<?=$_GET['eid'];?>);
  });

答案 1 :(得分:1)

我与剧本的作者交谈并使用了他的建议:

$(function()
    {
    var passedDates = $('#passed-dates').val().split(','); // works okay


    var dp = $('.date-pick')
        .datePicker(
            {
                createButton:false,
                closeOnSelect:false,
                selectMultiple:true,
                inline:true
            }
        );

        for (var i = 0; i < passedDates.length - 1; i++) 
        {
            dp.dpSetSelected(passedDates[i]);
        }

        dp.bind(
            'click',
            function()
            {
                $(this).dpDisplay();
                this.blur();
                return false;
            }
        )
        .bind(
            'dateSelected',
            function(e, selectedDate, $td, state)
            {
                $("#info").load("test1.php?date="+encodeURIComponent(selectedDate)+"&land-id="+<?=$_GET['eid'];?>);
            }
        );
});

这会在触发任何绑定之前更新所选日期,防止脚本无意中更新。