【问题标题】:Fire the datepicker onselect event manually手动触发 datepicker onselect 事件
【发布时间】:2013-09-24 10:50:50
【问题描述】:

谁能告诉我如何触发 datepicker 的 onselect 事件?我的代码运行良好(根据 datepickers altfield 的值从数据库中提取一些数据),但是当页面加载时,它不会在当前日期触发 onselect 事件,也不会显示任何内容;所以我想手动完成。

<script>
     $( "#datepicker" ).datepicker
    (
    {
          altField: '#sheet',
          onSelect: function load() {
            $(document).ready(function() {
                    $.ajax({
                    type: 'POST',
                    url: 'test.php',
                    data: {sheetid: $('#sheet').val()},
                    success: function(data)
                    {
                        $("#content").html(data);
                    }
                });

        });
        },
          firstDay: 1});
    </script>

【问题讨论】:

  • 尝试在body onload 函数或$(document).ready() 使用$('#datepicker').click(); 触发日期选择器的点击事件

标签: javascript jquery jquery-ui datepicker


【解决方案1】:

您可以在日期设置之后立即在日期选择器上触发click。

代码:

$(document).ready(function () {
    $("#datepicker").datepicker({
        altField: '#sheet',
        onSelect: function(date) {
            alert(date);
        },
        firstDay: 1
    });

    $('#datepicker').datepicker("setDate", new Date(2013,09,22) );
    $('.ui-datepicker-current-day').click(); // rapresent the current selected day

});

演示:http://jsfiddle.net/IrvinDominin/DynuW/

【讨论】:

  • 我收到一个错误:Uncaught Missing instance data for this datepicker。有人知道为什么会这样吗?
  • @ManojShrestha 可以提供样品吗?
  • @IrvinDominin 是否可以在 onSelect 中使用属性,例如 altField: '#Date',
【解决方案2】:

我是从 datepicker.js 文件的源代码中获取的。请注意,this 应该替换为您的输入元素(不是 jquery 对象,实际的 dom 元素)。就我而言,我是从 keydown 事件中调用它的。

// this is SUCH a hack.  We need to call onselect to call any
// specific validation on this input.  I stole this from the datepicker source code.
var inst = $.datepicker._getInst(this),
onSelect = $.datepicker._get(inst, "onSelect");
if (onSelect) {
    dateStr = $.datepicker._formatDate(inst);
    onSelect.apply((inst.input ? inst.input[0] : null), [dateStr, inst]);
}

【讨论】:

    【解决方案3】:

    最佳解决方案

    var inst = $.datepicker._getInst($("#date")[0]);
    $.datepicker._get(inst, 'onSelect').apply(inst.input[0], [$("#date").datepicker('getDate'), inst]);
    

    【讨论】:

    • 您能否解释一下为什么这是“最佳解决方案”,或者至少解释一下它是如何工作的?我不会认为使用 jQuery datepicker 模块的内部“隐藏”函数是一个好的解决方案,更不用说“最好的”了。
    • 对我来说很好用!
    【解决方案4】:

    这是我发现的唯一适用于 datetimepicker 的解决方案

    var $calendar =$('#from');
    $.datepicker._getInst($calendar[0]).settings.onSelect()//or onClose or any event 

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-10-07
      • 1970-01-01
      • 2019-10-10
      • 2011-09-11
      • 2011-12-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多