defaultDate / setDate获取类的第一个实例的文本值,而不是单击的实例

时间:2013-07-15 03:34:58

标签: jquery datepicker

相关的js / jQuery:

$(".changeDate").on('click',
    function(e) {
        var taskID = $(this).data('json').taskID;
        var dp = $("<input type='text' />").hide().appendTo('body');
        var curDate = $('#task'+taskID).text();
        dp.datepicker({
            onSelect: function(dateText, inst) {
                dateObj = {};
                dateObj['method'] = 'changeDueDate';
                var newDate = $(this).datepicker().val();
                dateObj['newDate'] = newDate;               
                dateObj['taskID'] = taskID;
                $.ajax({
                    url: 'editTasks.php',
                    type: 'post',
                    dataType: 'json',
                    data: dateObj,
                    success: 
                        function(date) {
                            if(date.status === 'true') {
                                $('#task'+taskID).text(newDate);
                                dp.datepicker( "destroy" );
                                dp.removeClass("hasDatepicker").removeAttr('id');
                                delete curDate;
                            }else{
                                alert(date.error);
                            }
                        },
                    error: function(xhr) {
                        alert("Something is broken. Let an SA know!\n" + 'Status code: ' + xhr.status);
                    }
                });
            },
            dateFormat: 'yy-mm-dd',
            setDate: curDate,
            showOtherMonths: true,
            showButtonPanel: true,
            showMonths: true,
            showYears: true,
            changeMonth: true,
            changeYear: true,
            minDate: 0
        });

    if (dp.datepicker('widget').is(':hidden')) {
        dp.show().datepicker('show').hide();
        dp.datepicker("widget").position({
            my: "left top",
            at: "right top",
            of: this
        });
    } else {
        dp.hide();
    }

    e.preventDefault();
});

相关HTML&amp; PHP:

<div class="viewContainer">
    <div align="center" class="smallHeader">Tasks</div>
    <div id="ticketTasksError"></div>
    <table style="width:100%">

    <?php 
        $tasks = array();
        while($row = $ticketTasksResults->fetch_assoc()) {
            $note = stripslashes((isset($row["Note"])) ? $row['Note'] : 'Add note');
            $row["Completed"] == 0 ? $dueDate = $row['DueDate'] : $dueDate = 'Completed on: ' . $row['CompletedWhen']; 
    ?>
        <tr bgcolor="#E5E5E5">
            <td class="tableCellBold"><?php echo $row['Name']; ?></td>
            <td class="tableCell"><?php echo $row['Description']; ?></td>
            <td class="tableCell" align="center"><a href="" class="changeDate" id="task<?php echo $row['ID']; ?>" data-json='{"taskID":<?php echo $row['ID']; ?>}'><?php echo $dueDate; ?></a></td>
            <td class="tableCell" align="center"><a href="" style="font-size:10pt;" id="editTaskLink">Edit</a></td>
        </tr>
        <tr bgcolor="#F5F5F5">
            <td class="tableCell" colspan="4" style="font-size:13px"><?php echo $row['Note'] == '' ? '<a href="" class="taskNote" data-json="{"taskID":'.$row['ID'].'}">Add Note</a>' : $row['Note']; ?></td>
        </tr>
        <tr style="border: none; font-size: 5px;"><td>&nbsp;</td></tr>

    <?php $i++; } ?>

    </table>
    <div id="addTask" align="left">
        <a href="" style="margin-top:5px;font-size:10pt;padding-left:10px;" id="addTaskLink">Add</a>
    </div>                
</div>

除了一个问题外,一切都很有效:setDate总是获得changeDate类的第一个成员的值。

请假设所有PHP都按预期工作。我确认curDate的值确实包含了在声明后用alert构造的正确值。

你能发现我错过的东西吗?提前谢谢。

修改 通过阅读Jay与我联系的文件,我能够克服这个问题。这是一个关闭问题AND和html / php问题(引用不一致)。

谢谢周杰伦!只需将我指向正确的文档,您就可以解决我的问题。

编辑2:我想发布解决方案代码,但我不能,因为我没有足够的声誉,但我是社区新手,我必须等待8小时才能回答这个帖子。

所以对于任何感兴趣的人创建一个函数,如:

var getTaskID = function(taskID) {
    var curDate = $('#task'+taskID).text();
    return curDate;
};

然后我将setDate改为defaultDate: $(this).data('json').dueDate

它现在按预期工作。

1 个答案:

答案 0 :(得分:0)

这似乎是由Closure问题引起的。您需要使用适当的闭包更新您的功能。可能需要正确传递datepicker中的所有“非本地”变量。看这里Closures