【问题标题】:jquery calling datepicker on dynamic elementsjquery在动态元素上调用datepicker
【发布时间】:2015-02-18 02:34:49
【问题描述】:

我试图在动态创建的元素上调用日期选择器,但不起作用。我知道我的格式不正确。有人知道怎么做吗?

    $("body").on('click', '.startNew', function() {
        $(".startNew").datepicker({
           dateFormat : "yy-mm-dd 00:00:00",
           numberOfMonths: 2,
           onSelect: function(selected) {
             $(".endNew").datepicker("option","minDate", selected)
           }
        });
    });
    $("body").on('click', '.endNew', function() {
       $(".endNew").datepicker({ 
           dateFormat : "yy-mm-dd 00:00:00",
           numberOfMonths: 2,
           onSelect: function(selected) {
              $(".startNew").datepicker("option","maxDate", selected)
           }
       });
    });

【问题讨论】:

  • 我们需要查看您在哪里创建元素,包括该来源和标记

标签: javascript jquery dynamic datepicker jquery-ui-datepicker


【解决方案1】:

已更新。尝试改变(正文 -> 文档;单击 -> 焦点)

来自

$(body).on('click',".startNew", function(){
    $(".startNew").datepicker({

$(body).on('click',".endNew", function(){
    $(".endNew").datepicker({ 

$(document).on('focus',".startNew", function(){
    $(this).datepicker({

$(document).on('focus',".endNew", function(){
    $(this).datepicker({ 

工作FIDDLE

HTML

Start: <input class='endNew'><br/><br/>
End: <input class='startNew'>

JS

$(document).on('focus',".startNew", function(){
  $(this).datepicker({
    dateFormat : "yy-mm-dd 00:00:00",
    numberOfMonths: 2,
    onSelect: function(selected) {
      $(".endNew").datepicker("option","minDate", selected)
    }
  });
});


$(document).on('focus',".endNew", function(){
  $(this).datepicker({ 
    dateFormat : "yy-mm-dd 00:00:00",
    numberOfMonths: 2,
    onSelect: function(selected) {
      $(".startNew").datepicker("option","maxDate", selected)
    }
   });
});

【讨论】:

  • 这不适用于动态创建的元素。
【解决方案2】:

问题是第一次点击正在初始化插件,但不会显示日期选择器,因为日期选择器点击处理程序是在点击事件之后添加的。所以

$("body").on('click', '.startNew', function () {
    if (!$(this).hasClass('hasDatepicker')) {
        $(this).datepicker({
            dateFormat: "yy-mm-dd 00:00:00",
            numberOfMonths: 2,
            onSelect: function (selected) {
                $(".endNew").datepicker("option", "minDate", selected)
            }
        }).datepicker('show');
    }
});
$("body").on('click', '.endNew', function () {
    if (!$(this).hasClass('hasDatepicker')) {
        $(this).datepicker({
            dateFormat: "yy-mm-dd 00:00:00",
            numberOfMonths: 2,
            onSelect: function (selected) {
                $(".startNew").datepicker("option", "maxDate", selected)
            }
        }).datepicker('show');
    }
});

在这种情况下,您尝试延迟初始化插件,但更好的解决方案是在目标元素 .startNew.endNew 创建后初始化插件。

【讨论】:

  • 有没有办法通过点击调用日期选择器?或者如何在 .startNew 和 .endNew 之后重新初始化插件?
猜你喜欢
  • 2013-08-02
  • 2012-05-13
  • 1970-01-01
  • 2016-12-19
  • 1970-01-01
  • 1970-01-01
  • 2019-01-16
  • 2011-03-14
相关资源
最近更新 更多