【问题标题】:jQuery UI Datepicker and select box dilemmajQuery UI Datepicker 和选择框困境
【发布时间】:2011-10-18 10:05:51
【问题描述】:

我已经在 jQuery UI 中尝试了日期选择器,并且可以让它与选择框一起工作,但只有当有日、月和年选择框时 (http://www.kelvinluck.com/assets/jquery/datePicker/v2/demo/datePickerIntoSelects.html)。

我需要的是有一个日期和月份的盒子,就像这里可以看到的那样...(http://www.bookassist.com/hotels/index.jsp?source=org)

有人知道这是否可以做到吗?完全碰壁了。

【问题讨论】:

  • jsFiddle 上发布您已经完成的工作并分享链接。这样每个人都可以更好地帮助您。
  • 你不能在选择日期时使用“onselect”处理程序来适当地设置下拉元素吗?
  • 这里是 jsFiddle 上的代码...jsfiddle.net/aggYd 我在下面尝试了 ace 的解决方案,但没有运气。

标签: jquery jquery-ui datepicker uidatepicker


【解决方案1】:

基本上你需要从http://www.kelvinluck.com/assets/jquery/datePicker/v2/demo/datePickerIntoSelects.html修改这部分

改变这部分,datePicker的初始化,

$(function()
{

    // initialise the "Select date" link
    $('#date-pick')
        .datePicker(
            // associate the link with a date picker
            {
                createButton:false,
                startDate:'01/01/2005',
                endDate:'31/12/2010'
            }

为此,通过添加月份数组并更新 endDate。

$(function()
{
    var months = ["January","February","March","April","May","June","July","August","September","October","November","December"];

    // initialise the "Select date" link
    $('#date-pick')
        .datePicker(
            // associate the link with a date picker
            {
                createButton:false,
                startDate:'01/01/2005',
                endDate:'31/12/2015'
            }



然后,更改更新 3 个选择 (d,m,y) 的函数

var updateSelects = function (selectedDate)
{
    var selectedDate = new Date(selectedDate);
    $('#d option[value=' + selectedDate.getDate() + ']').attr('selected', 'selected');
    $('#m option[value=' + (selectedDate.getMonth()+1) + ']').attr('selected', 'selected');
    $('#y option[value=' + (selectedDate.getFullYear()) + ']').attr('selected', 'selected');
}

仅 (d,m) 以这种格式“2011 年 8 月”指定月份。

var updateSelects = function (selectedDate)
{
    var selectedDate = new Date(selectedDate);
    $('#d option[value=' + selectedDate.getDate() + ']').attr('selected', 'selected');
    $('#m option[value=' + (months[selectedDate.getMonth()]) + ' ' +  (selectedDate.getFullYear()) + ']').attr('selected', 'selected');
}



然后更改从这里更改选择时更新选择器的功能

// listen for when the selects are changed and update the picker
$('#d, #m, #y')
    .bind(
        'change',
        function()
        {
            var d = new Date(
                        $('#y').val(),
                        $('#m').val()-1,
                        $('#d').val()
                    );
            $('#date-pick').dpSetSelected(d.asString());
        }
    );

对此,(编辑:我在之前的答案中错误地交换了年份值和日期值。)

// listen for when the selects are changed and update the picker
$('#d, #m')
    .bind(
        'change',
        function()
        {
            var d = new Date(
                        $('#m').val().split(" ")[1],
                        months.indexOf($('#m').val().split(" ")[0]),
                        $('#d').val()
                    );
            $('#date-pick').dpSetSelected(d.asString());
        }
    );

http://jsfiddle.net/2Nedr/1/ 就是这样做的。 希望能解决您的问题。

【讨论】:

  • 谢谢ace,但它没有用。我在上面的第一篇文章中添加了指向 jsFiddle 的链接。
  • 是的,当我检查它时它也没有用。设置为最近日期时,代码似乎有问题。稍后我会更新我的答案。
  • 这是一个工作代码。 jsfiddle.net/2Nedr 我正在解决他的代码存在的错误,请注意在他的示例中它没有 2011 年,尝试添加 2011 和 2012 并且他的代码将不起作用。
  • 我的错。有一个 endDate 配置。我会在一段时间内更新我的答案。
  • 感谢王牌的帮助。我需要删除年份选择框,并在一个选择框中包含月份和年份,例如 2011 年 8 月、2012 年 10 月等
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-29
  • 2012-10-10
  • 2022-11-12
  • 2019-08-03
  • 1970-01-01
  • 2015-01-28
相关资源
最近更新 更多