使用jQuery,我试图将日期选择器事件处理程序添加到输入元素中。
<div id="Box_tmpl" style="border:solid 1px #777; background:#ddd; display: none;">
<a class="remove-box" href="#">remove</a>
<div>
<label for="PeriodStart">Period (start):</label>
<input id="PeriodStart" class="start-end-date" name="period_start" readonly="readonly" />
</div>
<div>
<label for="PeriodEnd">Period (end):</label>
<input id="PeriodEnd" class="start-end-date" name="period_end" readonly="readonly" />
</div>
</div>
<a class="add-box" href="#" style="margin: 6px 0 10px auto;">add</a>
<div id="Boxes">
<div style="border:solid 1px #777; background:#ddd;">
<a class="remove-box" href="#">remove</a>
<div>
<label for="PeriodStart">Period (start):</label>
<input id="PeriodStart" class="start-end-date" name="period_start" readonly="readonly" />
</div>
<div>
<label for="PeriodEnd">Period (end):</label>
<input id="PeriodEnd" class="start-end-date" name="period_end" readonly="readonly" />
</div>
</div>
</div>
<script type="text/javascript">
$(function(){
$('.start-end-date').datepicker({ dateFormat: "yy-mm-dd" });
$('.remove-box').click(function(){
$(this).parent().remove();
});
$('.add-box').click(function(){
$('#Box_tmpl').clone().removeAttr('id').show().appendTo('#Boxes');
$('.start-end-date').datepicker({ dateFormat: "yy-mm-dd" });
$('.remove-box').click(function(){
$(this).parent().remove();
});
return false;
});
});
</script>
添加一个新框就可以了。在新框中添加remove-box事件处理程序是可行的。在新框中添加日期选择器事件处理程序不起作用。我不明白为什么。。。使用$().clone()创建新元素是否继承了旧元素的事件处理程序?如果是这样,我的问题可能是将日期选择器事件处理程序多次添加到同一元素。。。我的想法用完了
您必须使用
$().clone(true)
http://api.jquery.com/clone/
withDataAndEventsA布尔值,指示是否应将事件处理程序与元素一起复制。从jQuery1.4开始,元素数据也将被复制。
对于您在注释中的问题:初始化时,日期选择器会在输入中添加一个类"hasDatepicker"。不能使用该类重新初始化Input,因此,如果你不想克隆事件,你必须从克隆的输入中.removeClass('hasDatepicker')
,然后初始化它
你小提琴里的代码必须更改:
$('#Box_tmpl').clone().removeAttr('id').find('input.start-end-date').removeClass('hasDatepicker').end().show().appendTo('#Boxes');
$('.start-end-date').datepicker({ dateFormat: "yy-mm-dd" });
注意:.end()
返回到find()
之前的状态
为了将事件绑定到动态创建或克隆的元素,请使用.on()
$('#Boxes').on('click', '.remove-box', function(){
$(this).parent().remove();
});
演示