我不能在通过$ .ajax添加的元素上使用datepicker

时间:2014-07-23 15:15:02

标签: javascript jquery ajax datepicker

到目前为止,这是我的代码:

$('body').on('change', '.dropdown', function() {
    $.ajax({
        success: function(res) {
            if(res.success == true) { 
                 return elements with class .hasdatepicker

                 getdatepicker('.hasdatepicker');
            }
        }
    });
});

function getdatepicker(elem) {
    $(elem).each(function(){
        var currentYear = (new Date).getFullYear();
        var objdate = $(this);
        $(this).datepicker({
            changeMonth: true,
            changeYear: true,
            yearRange: '1950:currentYear',
            onChangeMonthYear: function(year, month, inst) {
                objdate.val(month+'/'+inst.selectedDay+'/'+year);
            }
        });
        $(this).attr("readonly","true");
    });
}

我知道它会转到getdatepicker,因为它会将readonly属性添加到元素中。

感谢您的帮助!

编辑:我真的很抱歉这个混乱。我更新了我的答案。我的函数getdatepicker实际上在success调用中。

2 个答案:

答案 0 :(得分:1)

您应该将getDatePicker()放在ajax调用的success函数中。 您现在调用它的方式是在运行success方法之前: 示例:

HTML:

<div id='test'>test</div>

JS:

$(document).on('click', '#test', function() {
$.ajax({
    success: function() {
        $("#test").addClass('hasdatepicker')
         getdatepicker($('.hasdatepicker')); //SUCCESS
    }
});

getdatepicker($('.hasdatepicker')); //FAIL
});

function getdatepicker(elem) {
    elem.html('success');
}

答案 1 :(得分:1)

你需要在ajax回调中调用你的函数,因为当getdatepicker运行ajax.success尚未运行时,因为ajax.success是异步的。

$('body').on('change', '.dropdown', function() {
    $.ajax({
        success: function () { 
        //return elements with class .hasdatepicker ;
        getdatepicker('.hasdatepicker');}
    });
});