我在beforeShowDay遇到问题.

当我的页面加载时,直到我点击日历中的一天,我突然显示的日期才会突出显示.此外,如果我单击下个月按钮并返回原始月份,则“选定”日期将按预期突出显示.

因此,只有在日历的初始绘制时,日期才会突出显示,因为我已经编程了它们.日历中的任何点击都会自行修复.

我错过了一个init选项吗?请参阅下面的代码示例.我的测试网址在受保护的目录中,用户/测试/测试通过.看看右栏底部的迷你卡.切换到下个月,然后回来查看我的问题.请注意5月份突出显示的日期.此外,请注意,在发生点击之前,“年份”下拉列表也会丢失.

http://www.urbanbands.com/dev/cgi-bin/links/eventmgr.cgi?do=list

代码:

<script>
$(document).ready(function(){

    // get the current date
    var today = new Date();
    var m = today.getMonth(),d = today.getDate(),y = today.getFullYear();

    // Need list of event dates for THIS month only from database.
    // Declare 'dates' var before adding "beforeShowDay" option to the datepicker,// otherwise,highlightDays() does not have the 'dates' array.
    dates = [];
    fetchEventDays(y,m+1);

    $('#datepicker').datepicker({
        dateFormat: 'yy-mm-dd',changeMonth: true,changeYear: true,setDate: today,inline: false
    });


    $('#datepicker').datepicker('option','onChangeMonthYear',fetchEventDays);
    $('#datepicker').datepicker('option','beforeShowDay',highlightDays);
    $('#datepicker').datepicker('option','onSelect',getday);


    // ------------------------------------------------------------------
    // getday
    // ------------------------------------------------------------------
    function getday(dateText,inst) { 
        $('#content').load('http://www.mydomain/eventmgr.cgi?do=view_day;date='+dateText+' #eventMgr_content',function() {
    alert('Load was performed. '+dateText);
        });
    }

    // ------------------------------------------------------------------
    // fetchEventDays
    // ------------------------------------------------------------------
    function fetchEventDays(year,month) {
        var paramStr ='?do=get_event_dates&yr=' + year + '&mo=' + month;
        $.get('<%config.db_cgi_url%>/eventmgr-ajax.cgi'+ paramStr,function(data) {
            var recur_dates = data.split(',');
            for(var i = 0; i < recur_dates.length; i++) {
                var date_parts = recur_dates[i].split('-');
                dates.push(new Date(date_parts[0],date_parts[1]-1,date_parts[2]));
            }                       

// This causes dates with events to highlight on initial draw,but
// when clicking to the next month,it switches back to orig month.
//        $('#datepicker').datepicker('option',{}); // Refresh

        });
    }

    // ------------------------------------------------------------------
    // highlightDays
    // ------------------------------------------------------------------
    function highlightDays(date) {
        for (var i = 0; i < dates.length; i++) {
            if ((dates[i].getTime() == date.getTime())) {
                return [true,'highlight'];
            }
        }
        return [true,''];
    }


});
  </script>

解决方法

谢谢@kingjiv你是100%正确的.日历在get请求完成之前显示.我尝试使用when方法,但无法异步获取日期.基本上我必须在日历显示之前突出显示日期,所以我不得不使用async:false(不是true).

我已经包含了我的完整代码,演示了如何使用beforeShowDay选项突出显示从数据库中提取的多个事件.使用asyc:false修复了突出显示的日期未在初始绘制中突出显示的问题.还包括用于改变细胞背景颜色的css.

还有一个小问题,“年份”下拉菜单没有显示在初始抽奖中,但我确认这只发生在FireFox 4中.任何点击日历都会导致显示年份菜单. Safari在初始绘图时正确显示年份菜单.

<link href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/themes/base/jquery-ui.css" rel="stylesheet" type="text/css"/>
  <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.5/jquery.min.js"></script>
  <script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/jquery-ui.min.js"></script>

<style type="text/css">
/* Dates with events on them. Text color - red,background - pastel yellow. */
td.highlight,table.ui-datepicker-calendar tbody td.highlight a { 
    background: none !important;
    background-color: #fffac2 !important; 
    color: #FF0000;
}

/* This is Today's day in rightsidebar mini calendar (datepicker). */
/* Restore style to that of a default day,then just bold it. */
.ui-state-highlight,.ui-widget-content .ui-state-highlight {
    border: 1px solid #d3d3d3; 
    background: #e6e6e6 url(http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/themes/base/images/ui-bg_glass_75_e6e6e6_1x400.png) 50% 50% repeat-x; 
    font-weight: bold;
    color: #555555;
}

/* This is the selected day in the inline datepicker. */
.ui-state-active,.ui-widget-content .ui-state-active {
    color: #000000;
    opacity: 1.0;
    filter:Alpha(Opacity=100);
    border: 1px solid #000000;
}

/* Add a little separation between month and year select menus */
.ui-datepicker select.ui-datepicker-month {
    width: 42%;
    margin-right: 6px;
}

</style>

<script>
$(document).ready(function(){

    // get the current date
    var today = new Date();
    var m = today.getMonth(),y = today.getFullYear();

    // Get a list of dates that contain events in THIS month only from database.
    // Declare and populate 'eventDates' array BEFORE adding "beforeShowDay" option to 
    // the datepicker. Otherwise,highlightDays() will have an empty 'eventDates' array.

    var eventDates = [];
    fetchEventDays(y,m+1);     // Get events for the current year and month.

    $('#datepicker').datepicker();
    $('#datepicker').datepicker('option',getday);
    $('#datepicker').datepicker('option','dateFormat','yy-mm-dd');
    $('#datepicker').datepicker('option','changeYear',true);
    $('#datepicker').datepicker('option','changeMonth','yearRange','2010:2012');
    $('#datepicker').datepicker('option','showButtonPanel',true);

    // disable all dates prior to today.
    //  $('#datepicker').datepicker('option','minDate',new Date(y,m,d));

    // ------------------------------------------------------------------
    // getday - Replaces the #content div of the current page with 
    // the content of the page that is created and displayed via perl
    // ------------------------------------------------------------------
    function getday(dateText,inst) { 
        $('#content').load('<%config.db_cgi_url%>/eventmgr.cgi?do=view_day;date='+dateText+' #eventMgr_content',function() {
//      alert('load was performed. '+dateText);
        });
    }

    // ------------------------------------------------------------------
    // fetchEventDays - The ajax call below is synchronous (NOT asynchronous).
    // eventDates array must be populated prior to adding the beforeShowDay option
    // to the datepicker,otherwise,highlightDays() will have an empty eventDates array.
    // ------------------------------------------------------------------
    function fetchEventDays(year,month,inst) {
        var url ='<%config.db_cgi_url%>/eventmgr-ajax.cgi?do=get_event_dates&yr=' + year + '&mo=' + month;

        $.ajax({
            url: url,async: false,success: function(result){
                var event_dates = result.split(',');
                for(var i = 0; i < event_dates.length; i++) {
                    var date_parts = event_dates[i].split('-');
                    eventDates.push(new Date(date_parts[0],date_parts[2]));
                }                       
            }
        });
    }

    // ------------------------------------------------------------------
    // highlightDays - Add a custom css class to dates that exist in the
    // eventDates array. Must also add the css for td.highlight (above).
    // ------------------------------------------------------------------
    function highlightDays(date) {
        for (var i = 0; i < eventDates.length; i++) {
            if ((eventDates[i].getTime() == date.getTime())) {
                return [true,''];
    }

});
</script>

jQuery Datepicker beforeShowDay仅在第一次单击后才起作用的更多相关文章

  1. jquery点赞功能实现代码 点个赞吧!

    点赞功能很多地方都会出现,如何实现爱心点赞功能,这篇文章主要为大家详细介绍了jquery点赞功能实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  2. ios – DatePicker包含Year

    我在我的应用程序中实现了dataPicker.但它只显示月,日,小时.我怎么能在日期选择器中添加年份.任何的想法?

  3. iOS 5 – 将UIDatePicker最小日期设置为“今天”

    我知道如何将UIDatePicker中的最大和最小日期设置为某个日期,我想知道是否可以这样做,所以最小日期始终是“今天”日期.在我的应用程序中,用户输入过去的日期是没有意义的,只是为了让他们添加一个今天或将来的日期.解决方法将最短日期设置为现在,将显示日期设置为2秒:在初始化Nib或在重新使用时为视图控制器设置数据时执行此操作.您也可以在viewWillAppear中执行此操作.额外积分:您可以添加一种IBAction方法,巧妙地鼓励用户不要选择错误的建议日期:

  4. ios – 在greift中将gregorian datepicker转换为波斯语日期选择器?

    解决方法您需要设置日历,而不是dateFormat:如果要更改语言,还必须设置语言环境属性:此外,正如问题注释所述,您正在使用NSDateFormatter,而不是代码中的UIDatePicker.幸运的是,答案仍然是正确的;UIDatePicker还有一个日历属性,您可以设置该属性来实现此目标.

  5. ios – 如果用户以编程方式命中UITextfield,如何显示UIDatePicker

    只有当用户UITextField被点击时,才想显示UIDatePicker.当选择日期时,它应该显示在相同的UITextField中.我想以编程方式实现UIDatePicker.我知道如何编写UITextField的代码.我甚至不知道如何调用UIDatePicker.有人可以帮我吗出生日期解决方法最简单的方法是实现datePicker如下:创建datePicker:然后将datePicker链接到textfieldinputView:最后,您可以在选择日期时捕获该操作,并将日期转换为字符串,以在textF

  6. 在IOS9中的Cordova应用程序使用JQuery / Javascript的window.history问题

    在两个测试用例中唯一改变的是Cordova.js.解决方法我看到这是几个星期前,但我会发布这个,以防其他人遇到它.听起来它可能与iOS9中的哈希更改生成的导航事件有关.如果是这样,可以将其添加到index.html以禁用哈希侦听:

  7. ios – 用UIDatePicker替换UITextField输入

    ,我有一个很大的例外–我不能让选择器消失!我尝试注册事件UIControlEventTouchUpOutside,但似乎这不是由选择器生成的.如何识别用户已完成选择日期?还有,有没有办法禁止用户直接输入UITextField?我想强迫他们使用选择器.我看到这篇文章“DisableblinkingcursorinUITextField?”,但还有另一种方式吗?

  8. iOS 5上的jQuery事件

    解决方法在Apple开发论坛上由一个人回答:我需要在将元素添加到DOM之后才绑定(),如下所示:

  9. 如何在iOS中使用DatePicker仅接受月份和年份

    我正在使用swift构建应用程序,在该应用程序中,有一个字段用于接受借记卡的到期日期以进行付款.如何在Swift中使用DatePicker只接受月份和年份.如果使用datepicker是不可能的,那么请建议任何其他方式.先感谢您.解决方法选择-1Objective-C的迅速Swift3另一种模式是>UIDatePickerModeTime,>UIDatePickerModeDate,>UIDate

  10. ios – 将UIDatePicker添加到UIAlertView

    我正在尝试将日期选择器添加到警报视图.我可以根据按钮点击将动画添加到屏幕上,我看到一个黑盒但没有日期选择器.这是我到目前为止所拥有的……

随机推荐

  1. jquery-plugins – 是否可以使用猫头鹰旋转木马实现循环/无限轮播?

    我正在使用猫头鹰旋转木马,它的工作完美,除了它不支持循环/无限滚动.我没有搜索google和stackoverflow的想法,没有运气.有没有人在猫头鹰旋转木马上实现圆形/无限滚动?

  2. jQuery动态输入字段焦点

    我想使用以下jQuery向我的页面动态添加一个输入字段:在这样做之后,我希望输入字段具有闪烁的文本光标的焦点,所以我想在创建后立即输入.有人可以告诉我我该怎么办?

  3. jquery – 为什么$(window).height()这样错了?

    我试图获取当前浏览器的视口高度,使用但我得到的价值观太低了.当视口高度高达850px时,我从height()获取大约350或400像素的值.这是怎么回事?

  4. jquery – 如果在此div之外和其他draggables内部(使用无效和有效的还原选项),则可拖动恢复

    例如这样但是由于明显的原因,这不行.我可以说这个吗?

  5. 创建一个jQueryUI 1.8按钮菜单

    现在jQueryUI1.8已经出来了,我正在浏览更新,并且遇到了新的Buttonwidget,特别是SplitButtonwithadropdown的演示之一.这个演示似乎表明Buttonwidget可以在这里创建一个下拉菜单.作为讨论的问题,我想知道使用这个新的Button小部件来创建一个下拉菜单有什么方法.干杯.解决方法您必须在按钮下方列出一个列表,方式类似于此处为自动完成提供的演示:http

  6. 灰色divs使用JQuery

    我试图使用这个代码:为了淡出一大堆名为MySelectorDiv的div,唯一的是,它只会淡出第一个而不是所有的div,为什么呢?

  7. 使用jQuery动态插入到列表中

    我有两个订单列表在彼此旁边.当我从一个列表中选出一个节点时,我想按照字母顺序插入到另一个列表中.抓住的是我想要把一个元素放在另一个列表中,而不刷新整个列表.奇怪的是,当我插入到右边的列表中,它工作正常,但是当我插入到左边的列表中时,顺序永远不会出来.我也尝试将所有内容读入数组,并将其排序在一起,以防止children()方法没有按照显示顺序返回任何东西,但是我仍然得到相同的结果.这是我的jQuer

  8. 没有回应MediaWiki API使用jQuery

    我试图从维基百科获取一些内容作为JSON:但我没有回应.如果我粘贴到浏览器的地址栏,就像我得到预期的内容.怎么了?解决方法您需要通过添加&callback=?来触发具有$.getJSON()的JSONP行为?在querystring上,像这样:Youcantestithere.没有使用JSONP,你正在击中same-originpolicy,阻止XmlHttpRequest获取任何数据.

  9. jQuery Ajax请求每30秒

    我有这段代码,但是有些人在我的网站上的值可能会改变.我需要每30秒钟更新一次#financediv.这可以做吗解决方法您可以将代码放在单独的函数中,如下所示:然后每30秒建立一个定时器调用该函数:祝你好运!总结以上是DEVMAX为你收集整理的jQueryAjax请求每30秒全部内容。如果觉得DEVMAX网站内容还不错,欢迎将DEVMAX网站推荐给好友。

  10. jquery – keypress事件在IE和Chrome中不工作,但在FF工作

    任何想法为什么会这样发生?我通常认为Chrome会更加宽容代码?这是我的按键键.我错过了什么吗?右图();和leftimage();是应该工作的功能,因为我在其他地方使用这些功能谢谢您的帮助!

返回
顶部