【问题标题】:Highlighting date with event in datepicker from mysql database使用 mysql 数据库中的 datepicker 中的事件突出显示日期
【发布时间】:2012-11-24 15:43:37
【问题描述】:

尝试使用 jquery 和 php 在日期选择器中“突出显示”我的数据库中的日期。我到处寻找可以帮助我的东西...

这是我目前正在使用的代码。 请注意,它具有 onSelect 状态,可以单击日期并从数据库中获取事件并将其打印到 div,这有效,现在我想突出显示事件的日期..

$(document).ready(function() {
        var SelectedDates = {};
        $.getScript('eventdates.php', function(eventsdate) {
            eventsdate;
        });
        $("#kalender").datepicker({
            firstDay: 1,
            dayNamesMin: ['Sö', 'Må', 'Ti', 'On', 'To', 'Fr', 'Lö'],
            monthNames: ['Januari', 'Februari', 'Mars', 'April', 'Maj', 'Juni', 'Juli', 'Augusti', 'September', 'Oktober', 'November', 'December'],
            dateFormat: "yy-mm-dd",
            beforeShowDay: function(date) {
                var Highlight = SelectedDates[date];
                if (Highlight) {
                    return [true, "Highlighted", Highlight];
                }
                else {
                    return [true, '', ''];
                }
            },
            onSelect: function(dateText, inst) {
                var myDate = new Date(dateText);
                var newFormat = $.datepicker.formatDate('yy-mm-dd', myDate);
                $.ajax({
                    url: 'events.php',
                    type: 'POST',
                    dataType: 'json',
                    data: {selectedData: newFormat},
                    success: function(result) {
                        if (result.date === newFormat) {
                            $('#event').html(result['date'] + " " + result['event']);
                        }
                        else {
                            $('#event').html(result['none']);
                        }
                    }
                });
            }
        });

    });​

eventdates.php

<?php

include_once ('connect.php');
$sql = mysql_query("SELECT * FROM `events`");
while ($row = mysql_fetch_array($sql)) {
    echo "SelectedDates[new Date('{$row['date']}')] = new Date('{$row['date']}')<br/>";
}
?>

events.php

<?php
include_once ('connect.php');
if (isset($_POST['selectedData'])) {
    $sql2 = mysql_query("SELECT * FROM `events` WHERE `date`='{$_POST['selectedData']}'");
    $row2 = mysql_fetch_array($sql2);
    if ($row2['date'] == $_POST['selectedData']) {
        $sql = mysql_query("SELECT * FROM `events` WHERE `date`='{$_POST['selectedData']}'");
        while ($row = mysql_fetch_array($sql)) {
            $data = array(
                "date" => $row['date'],
                "event" => utf8_encode($row['event'])
            );
            echo json_encode($data);
        }
    } else {
        $data = array(
            "none" => "Inget event denna dag!"
        );
        echo json_encode($data);
    }
}

?>

【问题讨论】:

    标签: php jquery mysql ajax jquery-ui


    【解决方案1】:

    我解决了这个问题,并想与其他遇到此类问题的人分享我的解决方案!

    jQuery 脚本

    <script>
        $(document).ready(function() {
            $("#kalender").datepicker({
                firstDay: 1,
                dayNamesMin: ['Sö', 'Må', 'Ti', 'On', 'To', 'Fr', 'Lö'],
                monthNames: ['Januari', 'Februari', 'Mars', 'April', 'Maj', 'Juni', 'Juli', 'Augusti', 'September', 'Oktober', 'November', 'December'],
                dateFormat: "yy-mm-dd",
                onSelect: function(dateText, inst) {
                    var myDate = new Date(dateText);
                    var newFormat = $.datepicker.formatDate('yy-mm-dd', myDate);
                    $.ajax({
                        url: 'events.php',
                        type: 'POST',
                        dataType: 'json',
                        data: {selectedData: newFormat},
                        success: function(result) {
                            if (result.date === newFormat) {
                                $('#event').html(result['date'] + "<br />\n" + result['event']);
                            }
                            else {
                                $('#event').html(result['none']);
                            }
                        }
                    });
                }, beforeShowDay: function(date) {
    
                    var yy = date.getFullYear(), mm = date.getMonth() + 1, dd = date.getDate();
                    if (dd < 10) {
                        var dt = yy + "-" + mm + "-0" + dd;
                    } else {
                        var dt = yy + "-" + mm + "-" + dd;
                    }
    <?php include_once ('eventdates.php') ?>
                    return [true, ''];
    
                }
            });
    
        });
    </script>
    

    events.php

    <?php
    include_once ('connect.php');
    if (isset($_POST['selectedData'])) {
        $sql2 = mysql_query("SELECT * FROM `events` WHERE `date`='{$_POST['selectedData']}'");
        $row2 = mysql_fetch_array($sql2);
        if ($row2['date'] == $_POST['selectedData']) {
            $sql = mysql_query("SELECT * FROM `events` WHERE `date`='{$_POST['selectedData']}'");
            while ($row = mysql_fetch_array($sql)) {
                $data = array(
                    "date" => $row['date'],
                    "event" => utf8_encode($row['event'])
                );
                echo json_encode($data);
            }
        } else {
            $data = array(
                "none" => "Inget event denna dag!"
            );
            echo json_encode($data);
        }
    }
    
    ?>
    

    eventdates.php

    <?php
    
    include_once ('connect.php');
    $sql = mysql_query("SELECT * FROM `events`");
    
    while ($row = mysql_fetch_array($sql)) {
        echo "var selDate" . $row['event_ID'] . " = '" . $row['date'] . "';";
        echo "if (dt === selDate" . $row['event_ID'] . ") {";
        echo "return [true, 'Highlighted'];";
        echo "}";
    }
    ?>
    

    希望这对其他人有帮助!

    【讨论】:

    • 您是否仍有可能启动并运行此脚本?
    【解决方案2】:

    AJAX 根据定义是异步的。这意味着您在 $.geScript 完成之前运行 datepicker 代码。需要在$.getScript的回调中调用datepicker代码

    $.getScript('eventdates.php', function() {
             /* new script has fired*/
             $("#kalender").datepicker({.....});
    
    });
    

    【讨论】:

    • 这会使整个日期选择器崩溃,有什么建议吗?
    • 我还没有弄清楚如何在 jQuery 中显示错误...但是当我看到这个解决方案时,它对我来说没有意义。 eventdates.ph 文件仅包含应该在代码中显示的日期列表。日期是从 SQL 数据库生成的。我不知道这种方法是否有效。我需要帮助才能让它工作,也许不是那样,而是以某种方式。
    • 使用浏览器控制台查找错误。Firefox 中的 Firebug,或 Chrome 中的 F12 键。这是调试任何 javascript 的绝对第一步
    • 应该可以工作,我也测试了使用$.getScript从php页面返回一个js变量并且工作正常。如果没有看到您已实现的完整代码,很难进行故障排除。要检查的一件事是查看控制台中的 ajax 请求并查看来自eventdates.php 的数据返回中的内容。同样在 $.getScript` 回调中可以调用 console.log(SelectedDates) 并在控制台中查看该对象是否有效
    • console.log(eventsdate) 打印了正确的内容,但 console.log(SelectedDates) 没有在控制台中打印任何内容。
    猜你喜欢
    • 2021-09-13
    • 2016-12-07
    • 2012-12-11
    • 2019-12-26
    • 1970-01-01
    • 2015-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多