2011-04-26 140 views
3

我试图将日期选择器控件应用于克隆的输入字段。 我在做的是找到我想要克隆的表行,用克隆(假)克隆它,然后为每个输入带一个类.date调用datepicker()。代码如下:关于克隆元素的jquery datepicker

$('.repeat').bind('click', function(){ 
     var parentEl = $(this).parents('.root'); 
     var lastRow = jQuery.makeArray($(parentEl).find('.last')); 
     var newRow = $(lastRow).clone(false); 
     $(lastRow).removeClass('last'); 
     $(newRow).addClass('last'); 
     newRow.find('input').each(function(){ 
      this.name = this.name.replace(/\[(\d+)\]/,function(str,p1){return '[' + (parseInt(p1,10)+1) + ']'}); 
    }).end().insertAfter($(lastRow)); 

newRow.find('.date').each(function() { 
     $(this).removeAttr('id'); 
     $('.date').datepicker({dateFormat: 'dd-mm-yy', changeYear: true, yearRange: '1970:2010'}); 
      }); 

现在无论$(本).datepicker()和$( '日')日期选择器()没有附上日期选择控件input.date。 上面的代码按照预期工作,除了datepicker位。 有人有什么想法?

在此先感谢!

+0

您是否曾尝试在应用datepicker之前将它们附加到DOM? – 2011-04-26 10:49:12

+0

对不起,我的错。有一些代码没有发布,它在执行了一些格式化操作后,在lastRow(insertAfter($ lastRow))之后插入了newRow。我认为那会把它附加到DOM上,还是我误会了? – jimmy 2011-04-26 11:01:36

+0

确实会将它添加到DOM中。我发布了一个答案,您需要对代码进行额外的更改才能工作。 – 2011-04-26 11:07:54

回答

14

看来,如果你(应用日期选择器前)加入该行第一,并删除由日期选择器.hasDatepicker添加类的工作。

$('.repeat').bind('click', function(){ 
     var parentEl = $(this).parents('.root'); 
     var lastRow = jQuery.makeArray($(parentEl).find('.last')); 
     var newRow = $(lastRow).clone(false, false); 
     $(lastRow).removeClass('last'); 
     $(newRow).addClass('last'); 
     $('.root').append(newRow); // added this 

     newRow.find('.date').each(function() { 
      $(this).removeAttr('id').removeClass('hasDatepicker'); // added the removeClass part. 
      $('.date').datepicker({dateFormat: 'dd-mm-yy', changeYear: true, yearRange: '1970:2010'}); 
     }); 
}); 

演示http://jsfiddle.net/gaby/LCfC2/

+2

Gaby,谢谢,您让我的一天! removeClass()位做到了这一点。 从昨天开始,这一直困扰着我! 感谢您的帮助! – jimmy 2011-04-26 11:14:41

+0

这里的关键是在创建元素上的日期选择器之前删除.hasDatepicker类。如果该类已经存在,日期选择器将不会创建! – AJReading 2013-10-23 10:30:13

+0

谢谢!我从来没有意识到,jQuery-ui的日期选择器与这样的元素ID搞混了:-S – Pabbles 2014-02-28 20:06:00

0

类元素必须被移除和日期选择器必须被添加到该克隆元件。无论是否已附加到DOM,每次都适用于我。

$(inputData3).removeAttr("class"); 
$(inputData3).datepicker();