【问题标题】:How to set end time to give me correct intervals?如何设置结束时间给我正确的时间间隔?
【发布时间】:2016-01-12 14:53:10
【问题描述】:

我正在尝试修复我的 JQuery 时间选择器以给我正确的结束时间。仅当我选择开始时间和间隔时,我当前的代码才能正常工作。示例:如果我选择上午 8:00 并选择间隔 30 分钟,我的结束时间将自动为上午 8:30,但是我的问题来了,因为我想在那之后点击我的下拉结束时间来查看像上午 8:30 这样的间隔(即我有),上午 9:00,上午 9:30,... 等等,直到下午 5:00,这是我最后一次。这是我的 HTML 代码:

 $(function() {
   for (var i = 5; i <= 60; i += 5) {
     $('#meeting').append('<option value="' + i + '">' + i + '   min' + '</option>');
   }

   function setEndTime() {
     var meetingLength = parseInt($('#meeting').find('option:selected').val() || 0);
     var selectedTime = $('#stime').timepicker('getTime');
     if (selectedTime == null || selectedTime == "") {
       alert("Please select the start time.");
     } else {
       selectedTime.setMinutes(selectedTime.getMinutes() + parseInt(meetingLength, 10), 0);
       $('#etime').timepicker('setTime', selectedTime);
     }
   }

   $('#stime').timepicker({
     'timeFormat': 'h:i a',
     'minTime': '8:00 AM',
     'maxTime': '5:00 PM',
     'step': 30
   }).on(function() {
     setEndTime();
   });

   $('#etime').timepicker({
     'timeFormat': 'h:i a',
     'minTime': '8:00 AM',
     'maxTime': '5:00 PM',
     'step': 5
   });

   $('#meeting').bind('change', function() {
     setEndTime();
   });
 });
<link href="https://cdnjs.cloudflare.com/ajax/libs/jquery-timepicker/1.8.9/jquery.timepicker.min.css" rel="stylesheet" />
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-timepicker/1.8.9/jquery.timepicker.min.js"></script>

<tr>
  <th>Start Time:</th>
  <td>
    <input type="text" id="stime" name="stime" class="time" />
  </td>
</tr>
<tr>
  <th>Length of meeting:</th>
  <td>
    <select name="meeting" id="meeting">
      <option value="">--Select length--</option>
    </select>
  </td>
</tr>
<tr>
  <th>End Time:</th>
  <td>
    <input type="text" id="etime" name="etime" class="time">
  </td>
</tr>

我不确定我的代码应该在哪里修改以根据选定的时间间隔给我结束时间。如果看到我的代码在哪里破坏,请告诉我。谢谢你。

【问题讨论】:

  • Jsfiddle 可能很有用。
  • 这是我发现但对我不起作用的一个,包含无法与我的插件一起使用的刷新选项,我尝试了许多其他选项,但总是给我一个错误。 jsfiddle.net/20m6b7qz/5

标签: javascript jquery html timepicker


【解决方案1】:

使用区间将#etime 的step 属性更改为函数(因此是动态值):

$('#etime').timepicker({
  'timeFormat': 'h:i a',
  'minTime': '8:00 AM',
  'maxTime': '5:00 PM',
  'step': function(i) {
            return $('#meeting').val() || 5;
          }
});

可运行示例

$(function() {
  for (var i = 5; i <= 60; i += 5) {
    $('#meeting').append('<option value="' + i + '">' + i + '   min' + '</option>');
  }

  function setEndTime() {
    var meetingLength = parseInt($('#meeting').find('option:selected').val() || 0);
    var selectedTime = $('#stime').timepicker('getTime');
    if (selectedTime == null || selectedTime == "") {
      alert("Please select the start time.");
    } else {
      selectedTime.setMinutes(selectedTime.getMinutes() + parseInt(meetingLength, 10), 0);
      $('#etime').timepicker('setTime', selectedTime);
    }
  }

  $('#stime').timepicker({
    'timeFormat': 'h:i a',
    'minTime': '8:00 AM',
    'maxTime': '5:00 PM',
    'step': 30
  }).on(function() {
    setEndTime();
  });

  $('#etime').timepicker({
    'timeFormat': 'h:i a',
    'minTime': '8:00 AM',
    'maxTime': '5:00 PM',
    'step': 5
  });

  $('#meeting').bind('change', function() {
    $('#etime').timepicker('remove');
    $('#etime').timepicker({
      'timeFormat': 'h:i a',
      'minTime': '8:00 AM',
      'maxTime': '5:00 PM',
      'step': $('#meeting').val()
    });
    setEndTime();
  });
});
<link href="https://cdnjs.cloudflare.com/ajax/libs/jquery-timepicker/1.8.9/jquery.timepicker.min.css" rel="stylesheet" />
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-timepicker/1.8.9/jquery.timepicker.min.js"></script>

<tr>
  <th>Start Time:</th>
  <td>
    <input type="text" id="stime" name="stime" class="time" />
  </td>
</tr>
<tr>
  <th>Length of meeting:</th>
  <td>
    <select name="meeting" id="meeting">
      <option value="">--Select length--</option>
    </select>
  </td>
</tr>
<tr>
  <th>End Time:</th>
  <td>
    <input type="text" id="etime" name="etime" class="time">
  </td>
</tr>

编辑

由于间隔变化时picker不刷新,所以有一个脏招强制刷新,完全移除picker并重新创建(我编辑了上面的sn-p):

$('#etime').timepicker({
  'timeFormat': 'h:i a',
  'minTime': '8:00 AM',
  'maxTime': '5:00 PM',
  'step': 5
});

$('#meeting').bind('change', function() {
  $('#etime').timepicker('remove');
  $('#etime').timepicker({
    'timeFormat': 'h:i a',
    'minTime': '8:00 AM',
    'maxTime': '5:00 PM',
    'step': $('#meeting').val()
  });
  setEndTime();
});

【讨论】:

  • 现在在我选择间隔后结束时间更改并且效果很好,但是如果我第二次更改间隔,只有第一个值会改变所有其他值仍然与我第一次选择的相同。如何解决这个问题?
  • @user3023588 你必须强制时间选择器刷新/重绘,我不知道该怎么做。我编辑了答案以添加默认步长值 5。
  • 我尝试使用刷新,但这给了我一个错误:jQuery.timepicker 上不存在方法刷新。所以我不知道如何解决这个问题。感谢您对此的帮助。
  • @user3023588 我找到了一种方法,但它有点脏:删除选择器,重新创建它。检查我的答案的编辑。
  • 所以我有时间对此进行了测试,并发现了一些不能正常工作的东西。因此,如果您选择一些随机的开始时间,比如说上午 9:00,然后选择间隔 35 分钟,结束时间将显示为上午 9:35 的值,但是如果您单击下拉菜单,则该值不存在。下拉从上午 8:00 开始,并在该值上添加间隔。只有在少数情况下工作正常,我认为 60 分钟给出了正确的值,但其他情况下不能正常工作。感谢您的帮助,但我想我必须深入挖掘才能找到更好的解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-07-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多