我正在处理一个动态的DOM,已经调用了jQuery UI日期选择器来处理特定类名为.date
的所有输入。
对于第一个静态结构它可以很好地工作,但是当我克隆它时,事件处理程序似乎不想移动过来。我得到了Firebug错误:
inst未定义
我尝试研究jQuery的新live()
函数,但无法使两者结合起来。有任何想法吗?
我正在处理一个动态的DOM,已经调用了jQuery UI日期选择器来处理特定类名为.date
的所有输入。
对于第一个静态结构它可以很好地工作,但是当我克隆它时,事件处理程序似乎不想移动过来。我得到了Firebug错误:
inst未定义
我尝试研究jQuery的新live()
函数,但无法使两者结合起来。有任何想法吗?
明白了,在将HTML添加到DOM后,我会在所有需要弹出日期选择器的输入框上运行以下代码。日期选择器会向已附加到的元素添加一个类,因此我们可以过滤掉现有的输入框,并仅将其应用于新的输入框。
$('.date').not('.hasDatePicker').datepicker();
希望这能够帮助到大家,因为我也曾经搜索了好几天都没有找到合适的解决方案。
您还应该注意,通过将其设置为上下文而不是整个页面,在新生成的HTML中检查input.date
的速度会更快,因为这是一种更有效的操作。
我有一个类似的问题,我的页面上有多个表格,每个表格都有多个日期选择器,在单击“添加行”按钮时,它会添加一个具有动态HTML和日期选择器的表格行。
经过长时间的搜索,我意识到我的输入日期字段没有定义“id”,它们看起来像这样
<input type="text" class="datepicker" name="mDate1" value="" size=8 >
jQuery将所有日期字段的值指向页面上定义的第一个日期字段,日历会在所有日期字段上弹出,但第一个日期字段的值会改变。我对html进行了如下更改:
<input type="text" class="datepicker" id="Date1" name="mDate1" value="" size=8 >
var allColumns = $("#"+$tableId+" tr:last td");
$(allColumns).each(function (i,val) {
if($(val).find(":input").hasClass("datepicker")){
$(val).find(":input").attr("id",newId+$(val).find(":input").attr("id"));
}
});
<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++;
});
接下来就是神奇的时刻了
$(document).ready(function() {
$('.date-input').live('click', function() {
$(this).datepicker('destroy').datepicker({showOn:'focus'}).focus();
});
});
$j(id or class).removeClass('hasDatepicker').datepicker();
它正在工作。
使用jQuery选择器:
$(".mydatepicker:not(.hasDatepicker)").datepicker()
页面上有多个jquery-ui库的实例也会导致此错误。删除多余的实例对我的情况有效。
inst未定义
。 $(document).ready(function(){
$(".datepickerCustom").datetimepicker();
$(".datepicker").datepicker();
$("#MainForm").validationEngine('attach');
....
});
所以我将代码更改为在文档准备就绪之前调用,如下所示:
$(".datepickerCustom").datetimepicker();
$(".datepicker").datepicker();
$(document).ready(function(){
$("#MainForm").validationEngine('attach');
....
});
现在一切都正常工作,没有问题。
在尝试了这里的许多答案后,我发现以下方法适用于我,并且在第一次点击/聚焦时显示
function vincularDatePickers() {
$('.mostrar_calendario').live('click', function () {
$(this).datepicker({ showButtonPanel: true, changeMonth: true, changeYear: true, showOn: 'focus' }).focus();
});
}
这需要您的输入具有“mostrar_calendario”类
live适用于JQuery 1.3+的版本,对于更新的版本,您需要将其适应为"on"
在此处查看更多关于差异的信息http://api.jquery.com/live/
我遇到了相同的症状,这是由于一个包含与输入元素相同id属性的td元素所致。
<td id="fld_xyz"><input id="fld_xyz" class="date" /></td>
我知道这并不理想,但值得注意的是,日期选择器组件似乎依赖于ID的唯一性。
hasDatepicker
的类,与Jquery UI无关。显然,Jquery UI代码在应用日期选择器之前检查此类,这会导致它无法工作!不要在要添加日期选择器的输入框中添加名为hasDatepicker
的类!否则会出现错误消息“inst未定义”。 - Liam