只有在脚本

时间:2015-10-06 21:54:43

标签: javascript jquery jquery-ui datepicker

我用一些输入字段(每行)编写一个jQuery数据表。其中一个字段需要是一个日期,因此我尝试使用jQuery datepicker来完成该字段的输入。

使用模板为每一行呈现相关字段:

var invoiceDateInputTemplate = '<input class="datepicker" id="InvoiceDate_{0}" name="InvoiceDate_{0}" type="text" />';

在数据表构建期间,我渲染模板并用适当的Id替换{0},以便id&amp;名称参数对于每一行都是唯一的。

在我的$(document).ready()函数的最后,在构建表之后,我运行以下代码来生成我的每一个日期&#39;使用类选择选项将字段转换为启用了datepicker的字段。出于某种原因,这似乎并不希望导致字段变为启用了datepicker:

$(function() {
    $(".datepicker").datepicker();
});

如果我在$(&#34; .datepicker&#34;)。datepicker()之前添加一个alert()调用,它就像一个champ ...在datepicker初始化之后调用一个alert()调用工作

这会导致DatePicker呈现:

$(function() {
    alert();
    $(".datepicker").datepicker();
});

这会导致DatePicker无法呈现(包含以提供示例):

$(function() {
    $(".datepicker").datepicker();
    alert();
});

为什么会这样?我是否遗漏了导致DatePicker未按预期初始化字段的内容?我非常确定必须触发警报才能让DatePicker正常工作,这不是标准操作程序。另外,为了澄清,我不相信在数据表构建之后我有任何关注的领域。

4 个答案:

答案 0 :(得分:2)

我觉得你有一个异步问题!

最简单的解决方案是在自定义事件上绑定对datepicker()的调用,然后在构建数据表后触发事件。像这样:

$(function() {
    // Create data table here
    $(window).trigger('datatable.built');
});

$(window).on('datatable.built', function() {
    $(".datepicker").datepicker();
});

答案 1 :(得分:0)

试试这个:

$(function() {
    $(document).on("focusin",".datepicker",function(){
        $(this).datepicker();
    });
});

如果它有效,你可以改进,而不是'#34;重新创建&#34;每当元素获得焦点时,datepicker

答案 2 :(得分:0)

事实证明,@ Guy有解决方案......我在setTimeout中设置了该功能,它开始按原样运行:

setTimeout(function() {
        $(".datepicker").datepicker();
    },1000);

我之前应该想到这一点......谢谢@Guy!

答案 3 :(得分:-1)

你在使用datatable有什么用?最有可能是在你附加事件后渲染,在这种情况下,它应该有一个像draw或者其他事件表明数据被渲染的事件