Datepicker仅更改表格第一行中的日期
我的日期选取器仅更改表格第一行中的日期。 我创建了一行表,然后当一个人点击add时,克隆该行并将其附加到表中。 datepicker在克隆后工作,但只更改第一行中的值。 只有在每次克隆行时销毁和部署datepicker,才会发生这种情况,否则datepicker只能在我表的第一行中运行。
有帮助吗?
谢谢
HTML代码
使用Javascript
$('#add-row').on('click', function (e) { e.preventDefault(); //datepicker does not work witout being created and destroyed on each row. //$('.datepicker').datepicker('destroy'); var tableBody = $('#periodsTable > tbody'); var lastRowClone = $('tr:last-child', tableBody).clone(); //setting periodId to -1 for any created periods $('td:first input[name=periodIds]', lastRowClone).val("-1"); tableBody.append(lastRowClone); //$(".datepicker").datepicker(); });
当您通过将DatePicker
小部件添加到具有class
datepicker
的元素来启动DatePicker
小部件时,它将仅适用于该时刻属于该页面的元素。
对于第一次调用后添加的每个其他元素:
$('.datepicker').datepicker();
在您的click
事件处理程序中会发生这种情况,您需要将DatePicker
添加到它们中,即使它们也有class
datepicker
。 它们是页面中的新元素,因此:
$(function () { // Adding DatePicker to the elements already in the page. $('.datepicker').datepicker(); $('#add-row').on('click', function (e) { e.preventDefault(); var tableBody = $('#periodsTable > tbody'); var lastRowClone = $('tr:last-child', tableBody).clone(); //setting periodId to -1 for any created periods $('td:first input[name=periodIds]', lastRowClone).val("-1"); tableBody.append(lastRowClone); // Adding DatePicker to the new element added to the page. // As the cloned element has the class hasDatepicker already there, // DatePicker thinks it's initialised for it. // You need to remove this class before adding DatePicker to it. lastRowClone.find('.datepicker').attr('id','').removeClass('hasDatepicker').datepicker(); }); });
注意:就像我在评论中提到的那样,要注意元素ID不能重复。 页面中的每个ID都应该是唯一的。 否则,您的标记将无效,并且指向该ID的任何jQuery
选择器将仅返回第一次出现,并将忽略其余的。
注意2:您的inputs
type
设置为date
。 在现代浏览器中,这将导致HTML 5
本机日历和jQuery
DatePicker
日历之间发生冲突。
注3:您的第二个input
没有设置class
datepicker
。
注意4:虽然您可能在HTML
标记中看不到任何重复的ID
,但DatePicker
在添加元素时为元素提供随机ID
,如果元素没有。 当您克隆此元素时,您正在创建一个共享此相同ID
的新元素,这将导致DatePicker
始终在第一个input
设置Date
。 找到一种方法来为您的元素提供正确且唯一的IDs
以避免此问题和许多其他问题。
演示