复制jQuery datepicker
datepicker
函数仅适用于创建的第一个输入框。
我试图通过克隆包含它的div
来复制一个datepicker。
click input-text date time picker
要初始化datepicker,根据jQuery UI文档我只需要做$('#example').datepicker();
它确实有效,但仅限于创建的第一个datepicker。
复制div
的代码如下:
$("a#dupMe").click(function(event){ event.preventDefault(); i++; var a = $("#template") .clone(true) .insertBefore("#template") .hide() .fadeIn(1000); a.find("input#txt").attr('value', i); a.find("input#example").datepicker(); });
最奇怪的是在document.ready
我已经:
$('#template #example').datepicker(); $("#template #txt").click(function() { alert($(this).val()); });
如果我点击#txt
它总是有效。
我建议你也只使用一个通用的类名。 但是,如果您出于某种原因反对这种情况,您还可以编写一个函数来为模板div
所有文本框创建日期选择器(在每次复制后调用)。 就像是:
function makeDatePickers() { $("#template input[type=text]").datepicker(); }
我使用CSS类代替:
然后,在你的document.ready
函数中:
$('.calendar').datepicker();
以这种方式为多个日历字段使用它对我有用。
我有一个非常类似的问题,经过几个小时的测试,我找到了解决方案。 我正在复制一段HTML代码并将其插入已包含jQuery日期选择器日历的部分之后。 我最初没有意识到的是jQuery UI日历在执行.datepicker()
函数时修改了元素的类。 结果是当您尝试复制代码并为该新部分启动日历的新实例时,它失败了,因为根据CSS已经存在。 如果您尝试使用.datepicker('destroy')
则无法销毁此ghost实例,因为它实际上并不存在。 我通过在HTML中重置日期选择器元素的类然后将datepicker添加到该元素来解决了这个问题…
以下是我使用的代码。 希望这能节省别人的时间……
$('#addaddress').click(function() { var count = $('.address_template').size(); var html = $('.address_template').eq(0).html(); $('#addaddress').before('' + html + ''); $('.address_template H1').eq(count).html("Previous Address " + count); $('.address_date').eq(count).attr("class","address_date"); $('.address_date').eq(count).attr("id","movein" + count); $("#movein" + count).datepicker(); });
我克隆的html有多个datepicker输入。
使用Ryan Stemkoski的答案和Alex King的评论,我提出了这个解决方案:
var clonedObject = this.el.find('.jLo:last-child') clonedObject.find('input.ui-datepicker').each(function(index, element) { $(element).removeClass('hasDatepicker'); $(element).datepicker(); }); clonedObject.appendTo('.jLo');
谢谢你。