0

我在这里阅读了很多关于我的问题的帖子,但我还没有找到解决方案,可能是因为我不是 JQuery 之王......

这是一个非常简单的例子:

例子

当我尝试添加新行时,日期选择器不起作用。我不知道该怎么办。我使用这个函数在我的表中添加一个新行。(实际上,我有一个包含许多表格的 html 页面,并且每个表格我都使用 datepicker)

    var champ_date_arrivee = document.createElement('input');
champ_date_arrivee.setAttribute('type','text');
champ_date_arrivee.setAttribute('size','10');
champ_date_arrivee.setAttribute('name','date_t');
champ_date_arrivee.setAttribute('value','');
champ_date_arrivee.setAttribute('id','date_t');
champ_date_arrivee.className='champ_date_input_tableau';
newCell1.appendChild(champ_date_arrivee);

这个日期选择器的代码:

$(document).ready(function(){

 $.datepicker.setDefaults($.datepicker.regional['fr']);
 $('.champ_date_input_tableau').datepicker({ /* action sur class date */

    dateFormat: 'dd-mm-yy',
    changeMonth: true,
    changeYear: true,
    yearRange: "c-70:c+70",
    clickInput:true,
 });

});

如您所见,我使用类名 champ_date_input_tableau,因为我不知道如何以其他方式进行。

我试过这个:

    var champ_date_arrivee = document.createElement('input');
champ_date_arrivee.setAttribute('type','text');
champ_date_arrivee.setAttribute('size','10');
champ_date_arrivee.setAttribute('name','date_t');
champ_date_arrivee.setAttribute('value','');
champ_date_arrivee.setAttribute('id','date_t');
champ_date_arrivee.className='champ_date_input_tableau';
    $(champ_date_arrivee).datepicker({
    dateFormat: 'dd-mm-yy',
    changeMonth: true,
    changeYear: true,
    yearRange: "c-70:c+70",
});
newCell1.appendChild(champ_date_arrivee);

你在这个链接上有结果这个尝试 它不起作用。

我知道我必须使用这样的代码,但是如何?

 jQuery('.date-pick').removeClass('hasDatepicker').datepicker({
dateFormat: 'mm-dd-yy'
});

你是我最后的机会...

对不起我的英语,我是法国人。

谢谢您的帮助。

4

3 回答 3

2

你真的不需要.on(),.delegate().live(). 如果您只需将 Datepicker 添加到ajoutLigneAuTableauTransfert()函数的底部,它就足够聪明了。因为您在应用 datepicker 后正在修改 ID 属性,所以它搞砸了。执行后专门调用 datepicker 插件majNumLignesTabTransfert('ajout');

(1) 删除您在 中的两个加倍电话ajoutLigneAuTableauTransfert()。(2) 我还注意到您在最后一个配置选项的末尾添加了逗号,这在 IE 中将失败,并且从技术上讲是 javascript 中的语法错误。(3) 在之后添加 datepicker 调用majNumLignesTabTransfert('ajout');

这是我描述的显示它工作的变化。在 javascript 注释中查找// ANT-MOD指标。

http://jsfiddle.net/dfDNu/

于 2012-07-28T22:09:12.843 回答
0

好的,你需要使用 jQuery 的live()方法,所以

$('.champ_date_input_tableau').live('focusin', function() {
    $(this).datepicker();
});​ 

现在继续添加更多元素,live也会将其绑定到新元素。

编辑:

据说它已live被弃用,但我相信有一些类似的东西叫做on. 因此,如果您对始终使用最新版本非常谨慎,请继续使用该版本

于 2012-07-28T21:39:51.787 回答
0

您的代码不起作用的原因是,当您的页面加载时,日期选择器仅连接到已经存在的表单项目,但不会应用于新项目。添加新行时,您需要确保在刚刚添加的特定项目上调用 .datepicker() 函数。

根据 Dorian 的回答,您可以动态执行此操作,但是,请勿使用 LIVE。(阅读文章以了解有关它的各种问题的解释。从 jQuery 1.7 开始,它已被弃用。)相反,您需要查看 on() 函数。像这样的东西应该工作:

$('#BlocFormulaire').on('click', '.champ_date_input_tableau', function() {
   $(this).datepicker();
});
于 2012-07-28T21:40:05.177 回答