2016-02-19 53 views
0

这个问题已经被反复询问,并且唯一回答的是其他人试图在.onReady()函数中初始化datepicker的问题。我没有那样做。实际上,我实际上正在做这个解决方案正在做的事情;在创建元素后立即执行datepicker。jQuery datepicker不能用于动态插入的html元素

这里是我的模板代码:

<input type=text name="txt_you_History_From_Date_XXX" id="txt_you_History_From_Date_XXX" class="month-picker inputField" size=16 maxlength=16> 

你会发现每月选取器类。另外,您会注意到“XXX”占位符。

这里是插入该模板代码的代码:我确实看到了“这里”的警报,如果我取消它

// 
// find the next available id 
// 

for (var i = 0; ; i++) { 
    if (!$("#divEmployer_" + i.toString()).length) { 
     break; 
    } 
} 


// 
// get html, and replace the placeholders with id, then append. 
// 

$.get("content/contentHistoryEmployerTemplate.html", function (data) { 

    while (data.indexOf("XXX") >= 0) { 
     data = data.replace("XXX", i.toString()); 
    } 

    $("#employerDIV").append(data); 
}); 


// 
// activate datepicker on all month-picker class elements 
// 

$('.month-picker').datepicker({ 
    changeMonth: true, 
    changeYear: true, 
    showButtonPanel: true, 
    dateFormat: 'MM yy', 
    onClose: function (dateText, inst) { 
     $(this).datepicker('setDate', new Date(inst.selectedYear, inst.selectedMonth, 1)); 
    } 
}); 

//alert("here"); 

,所以我知道代码正在运行。

datepicker()不会引发错误。

我知道这个函数是可用的,因为如果我在我的<HEAD>中注释掉我的jquery-ui-min.js,那么对datepicker()的引用会引发错误。

但是,该字段在收到焦点时没有响应。日期选择器不出现。

谁能告诉我有什么不对?谢谢!

回答

1

您正试图在元素存在之前实例化日期选择器。将代码放入的异步回调中。

$.get("content/contentHistoryEmployerTemplate.html", function (data) { 

    while (data.indexOf("XXX") >= 0) { 
     data = data.replace("XXX", i.toString()); 
    } 

    $("#employerDIV").append(data); 

    // PUT DATEPICKER HERE 
}); 
+0

确定吗? .get()完成后,我使用.datepicker()。 .get()包含append()。不过,我会尝试。谢谢。 –

+0

呃,枪的儿子!这工作!你能花一点时间解释我原来的做法是不存在的吗? .get()是一个异步调用,也许吧? –

+0

100%是的,'$ .get'是异步的。但正如我所说,你正试图实例化datepicker之前,你想要绑定它的元素已被插入到DOM(这就是你的'append'调用正在做什么。) – Mathletics