【问题标题】:datepicker, using parameters日期选择器,使用参数
【发布时间】:2016-03-02 16:49:48
【问题描述】:

我有一个日期输入、一个月份输入和一个年份输入,以及一个显示的日期选择器。单击图像时,我会在每个输入中输入日期、月份和年份。

现在我的问题是日、月和年输入的 id 会动态变化,我想将它们指定为参数:

        <input name="dayXX" id="dayXX"> 
        <input name="monthXX" id="monthXX"> 
        <input name="yearXX" id="yearXX">  
        <input name="calendario" id="calendario" onclick="$(this).openDatepicker();">
        <input type="hidden" id="datepicker">

       $(function () {
         $("#datepicker").datepicker({
            firstDay: 0,
            monthNames: ['January', 'February', 'March',
            'April', 'May', 'June',
            'July', 'August', 'September',
            'October', 'November', 'December'],
            dayNames: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],
            dayNamesShort: ['S', 'M', 'T', 'W', 'T', 'F', 'S'],
            dayNamesMin: ['S', 'M', 'T', 'W', 'T', 'F', 'S'],
            dateFormat: 'dd-mm-yy',

       });
     });



   jQuery(function($) {

      $.fn.openDatepicker = function() {

         $('#datepicker').datepicker('show');
             var date = $("#datepicker").datepicker().val();
         alert(date);
     };
    });

XX 会动态变化。

但这是异步的,不会将值返回给“openDatepicker”函数。点击日期时如何调用函数并返回值?

【问题讨论】:

  • 你能解释一下XX文本是如何动态变化的吗?也许有了这些信息,我可以更新我的答案来帮助你。
  • 它没有规则,我有这么多表格,有一些不同的日/月/年代码,(它们将来会长大),我必须使用javascript/jquery标准函数
  • 我用新闻更新了代码
  • @cucuru 你想做什么?点击图片是什么意思?你的意思是日历小部件弹出和日期选择?你能发个小提琴吗?

标签: javascript jquery datepicker


【解决方案1】:

这有点冗长,但在这种情况下您可以使用类。我添加了一个包装器以使其更易于使用:

<div class="pickergroup">
  <input class='dayme' name="day" id="day">
  <input class='monthme' name="month" id="month">
  <input class='yearme' name="year" id="year">
  <input class='calendario'>
  <input class="hidden datepicker">
</div>

从标记中删除点击处理程序并将其放入代码中:

 $(function() {
   $(".pickergroup").find(".datepicker").datepicker({
     firstDay: 0,
     monthNames: ['January', 'February', 'March',
       'April', 'May', 'June',
       'July', 'August', 'September',
       'October', 'November', 'December'
     ],
     dayNames: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],
     dayNamesShort: ['S', 'M', 'T', 'W', 'T', 'F', 'S'],
     dayNamesMin: ['S', 'M', 'T', 'W', 'T', 'F', 'S'],
     dateFormat: 'dd-mm-yy'
   });
   $('.pickergroup').on('click', '.calendario', function() {
     var mycontainer = $(this).parent('.pickergroup');
     var dp = mycontainer.find('.datepicker');
     dp.show().datepicker('show').hide();//work around hidden element x position
     var pdate = dp.datepicker('getDate');
     if (pdate) {
       var day = pdate.getDate();
       var month = pdate.getMonth() + 1;
       var year = pdate.getFullYear();
       mycontainer.find('.dayme').val(day);
       mycontainer.find('.monthme').val(month);
       mycontainer.find('.yearme').val(year);
     }
   });
 });

CSS 隐藏日期选择器的输入:

.hidden {
  display: none;
}

编辑:添加小提琴:https://jsfiddle.net/MarkSchultheiss/mct4owch/

我添加了 onSelect,以便您可以在选择时看到它:

$(function() {
  $(".pickergroup").find(".datepicker").datepicker({
    onSelect: function(dateText, dpInst) {
      var mycontainer = $(this).parent('.pickergroup');
      console.log(dateText);
      var pdate = $(this).datepicker("getDate");
      if (pdate) {
        var day = pdate.getDate();
        var month = pdate.getMonth() + 1;
        var year = pdate.getFullYear();
        mycontainer.find('.dayme').val(day);
        mycontainer.find('.monthme').val(month);
        mycontainer.find('.yearme').val(year);
      }
    },
    firstDay: 0,
    monthNames: ['January', 'February', 'March',
      'April', 'May', 'June',
      'July', 'August', 'September',
      'October', 'November', 'December'
    ],
    dayNames: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],
    dayNamesShort: ['S', 'M', 'T', 'W', 'T', 'F', 'S'],
    dayNamesMin: ['S', 'M', 'T', 'W', 'T', 'F', 'S'],
    dateFormat: 'dd-mm-yy'
  });
  $('.pickergroup').on('click', '.calendario', function() {
    var mycontainer = $(this).parent('.pickergroup');
    var dp = mycontainer.find('.datepicker');
    dp.show().datepicker('show').hide(); //work around hidden element x position
    var pdate = dp.datepicker('getDate');
    if (pdate) {
      var day = pdate.getDate();
      var month = pdate.getMonth() + 1;
      var year = pdate.getFullYear();
      mycontainer.find('.dayme').val(day);
      mycontainer.find('.monthme').val(month);
      mycontainer.find('.yearme').val(year);
    }
  });
});

【讨论】:

  • 当我只有一个日期选择器时它可以工作,但是当在同一个 html 中有 2 个时它总是将值放在第一个中!有 2 个日期选择器我该怎么做?
  • @cucuru 使用修改后的标记对我有用。请参阅其中两个的工作示例的小提琴。
【解决方案2】:

您可以使用 jQuery 开始选择器语法来查找 ID。

$('id^=day').val($('id^=day').val()+selectedDay);
$('id^=month').val($('id^=month').val()+selectedMonth);
$('id^=year').val($('id^=year').val()+selectedYear);

提醒一下,starts-with 选择器将查找 ID 以该文本开头的 所有 HTML 元素,因此确保只有一个 ID 以 'day 开头的元素很重要', 'month' 和 'year' 否则你可能会得到意想不到的结果。

Reference: jQuery starts with selector

【讨论】:

  • 谢谢,有时我在同一个 html 代码中有多个日期选择器,所以我不能使用它。还是谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-09
  • 2017-06-24
  • 2020-01-04
  • 1970-01-01
  • 2012-04-29
相关资源
最近更新 更多