代码之家  ›  专栏  ›  技术社区  ›  Gazillion

克隆日期选择器对象[JQuery]

  •  8
  • Gazillion  · 技术社区  · 16 年前

    我通过一个css类定义了一个datepicker输入字段。我现在想克隆这个输入字段,并将其保存,以便克隆的输入也是日期选择器。

    在阅读了各种来源之后,我被引导相信下面的代码应该可以工作,但是它不能。我希望有人能帮我找出我做错了什么:)

    <input type="text" id="date" name="date" class="calendar" />
    <input type="button" id="clone" name="clone" value="Clone dates" />
    

    下面是javascript:

    <script type="text/javascript">
    $(document).ready(function(){
    
     $('.calendar').datepicker();
    
     $('#clone').click(function()
     {
      $('.calendar:last').clone().append().insertAfter('.calendar:last');
     });
    
    });
    
    </script>
    

    到目前为止,输入字段是重复的,并在最后一个实例之后插入,但datepicker不起作用。我尝试将“true”传递给克隆函数,但它给了我一个错误 inst没有定义

    任何帮助都将不胜感激:)

    4 回复  |  直到 16 年前
        1
  •  14
  •   David Morton    16 年前

    将其更改为:

    $('.calendar:last').clone(false).removeClass('hasDatepicker').insertAfter('.calendar:last').datepicker();
    
        2
  •  5
  •   dcharles    14 年前

    糟糕的是,我不能再对上面给出的答案发表评论了,但代码仍然错误!日期选择器显示在克隆的输入元素处,但在原始输入字段中使用选定的日期值,并将克隆的输入字段保留为空。。有什么建议吗?

    编辑:

    使用以下代码为我修复了它。。

    $('.datum',clone).removeClass("hasDatepicker").attr('id',"").datepicker();
    

    按照上面的建议删除类之后,我还删除了克隆输入元素的id。它与原始字段相同,因此我使用datepicker框中选定的日期更新原始输入字段。

        3
  •  0
  •   cheesemacfly Deisbel R Diaz    13 年前

    之前:

     $('#clone').click(function()
     {
      $('.calendar:last').clone().append().insertAfter('.calendar:last');
     });
    

    之后:

     $('#clone').click(function()
     {
      $('.calendar:last').clone().append().insertAfter('.calendar:last').attr('id',"");
     });
    
        4
  •  0
  •   EGN    12 年前

    首先,是什么导致了问题: JQuery将datepicker分配给元素id。若要克隆元素,那个么也可以克隆相同的id。jQuery不喜欢哪个。无论单击哪个输入字段,都可能会收到空引用错误或将日期分配给第一个输入字段。

    解决方案:

    2) 将新的唯一ID分配给所有输入字段 3) 为每个输入分配日期选择器

    <input type="text" name="ndate[]" id="date1" class="n1datepicker">
    

    在克隆之前,请销毁日期选择器

    $('.n1datepicker').datepicker('destroy');
    

    克隆后,还要添加这些行

    var i = 0;
    $('.n1datepicker').each(function () {
        $(this).attr("id",'date' + i).datepicker();
        i++;
    });
    

    奇迹发生了