为什么在第一次设置日期时,此代码没有正确设置ui.datepicker.js日历?

时间:2010-01-06 15:26:46

标签: jquery jquery-ui datepicker

我有一个日期输入表格,它使用三个选项(日/月/年)

以下脚本允许使用datepicker设置选择。此外,一旦完成此操作,就可以更改选择,并将更改反映在datepicker中。

但是,如果您先设置选择,然后单击打开日期选择器,它不会选择对选择的更改并在datepicker中突出显示正确的日期。它只适用于首先使用datepicker!

这是JQuery:

$(document).ready(function() {

        $('.installDatePicker').append('<img src="assets/images/ico-calendar.png" width="20" height="22" alt="Pick date" /><div class="cal"/>')

        $('.installDatePicker').each(function(i){
            $(this).find('.cal').datepicker({
                beforeShow: readSelected,
                onSelect: updateSelected,   
                minDate: new Date(2010, 1 - 1, 1), 
                maxDate: new Date(2012, 12 - 1, 31),    
            }).hide();  
        })

        $(this).find('img').click(function(){
            $(this).parent().find('.cal').datepicker({
                beforeShow: readSelected
            }).show()
        })  
    });

    // Get values of select boxes and send to datepicker 
    function readSelected() { 
        return {
            setDate: $(this).parent().val(
                $(this).find('select:eq(1)').val() + '/' +  
                $(this).find('select:eq(0)').val() + '/' + 
                $(this).find('select:eq(2)').val())
            }               
    }  

    // Set values of select boxes from datepicker
    function updateSelected(date) {  
        $(this).parent().find('select:eq(1)').val(date.substring(0, 2));  
        $(this).parent().find('select:eq(0)').val(date.substring(3, 5));  
        $(this).parent().find('select:eq(2)').val(date.substring(6, 10));
        $(this).hide();
    }

这是单个日期控件的结构

<fieldset id="firstChoiceDate" class="installDatePicker">
    <select>
        <option value="01">1</option>
        <option value="02">2</option> 
        <option value="03">3</option>
        <option value="04">4</option> 
        <option value="05">5</option>
        <option value="06">6</option> 
        <option value="07">7</option>
        <option value="08">8</option> 
        <option value="09">9</option>
        <option value="10">10</option> 
        <option value="11">11</option>
        <option value="12">12</option> 
        <option value="13">13</option>
        <option value="14">14</option> 
        <option value="15">15</option>
        <option value="16">16</option> 
        <option value="17">17</option>
        <option value="18">18</option> 
        <option value="19">19</option>
        <option value="20">20</option> 
        <option value="21">21</option>
        <option value="22">22</option> 
        <option value="23">23</option>
        <option value="24">24</option> 
        <option value="25">25</option>
        <option value="26">26</option> 
        <option value="27">27</option>
        <option value="28">28</option> 
        <option value="29">29</option>
        <option value="30">30</option> 
        <option value="31">31</option>
    </select>

    <select>
        <option value="01">Jan</option>
        <option value="02">Feb</option> 
        <option value="03">Mar</option>
        <option value="04">Apr</option> 
        <option value="05">May</option>
        <option value="06">Jun</option> 
        <option value="07">Jul</option>
        <option value="08">Aug</option> 
        <option value="09">Sep</option>
        <option value="10">Oct</option> 
        <option value="11">Nov</option>
        <option value="12">Dec</option>
    </select>  

    <select>
        <option value="2010">2010</option>
        <option value="2011">2011</option>
        <option value="2012">2012</option>
    </select>
</fieldset>

2 个答案:

答案 0 :(得分:0)

我很好奇你使用$(this):

$(this).find('img').click(function(){ 

setDate: $(this).parent().val(

$(this).parent().find('select.....

您期望this在这些情况下到底是什么意思?

第一个是在准备好之内,所以我不确定它会是什么。

第二个和第三个是非匿名函数,所以我不确定这是否会引用你想要的对象。

虽然可能是错的......

答案 1 :(得分:0)

我实际上是OP,但当我发布时,某种程度上没有登录:)

要回答James问题,有问题的代码实际上是在“每个”循环中开始的,我设法粘贴了一个'实验'来尝试修复它 - 我用它替换了它

$('.installDatePicker img').click(function(){
        $(this).parent().find('.cal').datepicker({
            beforeShow: readSelected
        }).show()
})

我在原始问题中所说的行为相同,所以遗憾的是我的问题仍然存在!