【问题标题】:JQuery timepicker end time based on meeting length?基于会议长度的JQuery timepicker结束时间?
【发布时间】:2015-12-03 21:49:22
【问题描述】:

我正在尝试根据我可以选择的会议时长来获取我的结束时间下拉值。所以我的代码如下所示:

<tr>
    <th>Start:</th>
    <td><input type="text" id="start" name="start"/></td>
</tr>
<tr>
    <th>Length of meeting</th>
    <td>
       <select name="meeting" id="meeting" onClick="interval()">
          <option value="">--Select length--</option>
       </select>
    </td>
</tr>
<tr>
    <th>End:</th>
    <td><input type="text" id="end" name="end"></td>
</tr>

<script>
$(function() { 
    $('#start').timepicker({
       'minTime':'8:00 AM',
       'maxTime':'9:00 PM'
    });

    $('#end').timepicker({
       'minTime':'8:00 AM',
       'maxTime':'9:00 PM',
       'step':???(how to pass my value from meeting dropdown here?)
     });
   });

   function interval(){
    var meeting = $('#meeting').val();
    if(meeting == ''){
        $('#meeting').empty();
        $('#meeting').append('<option value="">--Select length--</option>');
        for(var i=5; i <= 60; i+=5){
            $('#meeting').append('<option value="'+i+'">'+i+'   min'+'</option>');
        }   
    }
}
</script>

所以我可以选择开始时间,然后我可以选择动态创建的会议时长,然后我应该得到我的结束时间。我的会议间隔是 5 到 60 分钟。因此,如果我选择上午 8:00 的开始时间和 15 分钟的会议长度,我应该以 15 分钟为间隔获得结束时间。所以我在最终下拉列表中的第一个值将是上午 8:15,然后是上午 8:30,依此类推。现在,我能够在 end timepicker 'step':15 中硬编码 mt 值。我需要的是我想传递我的会议长度值,这样会增加我的结束时间。如果有人可以提供帮助,我将不胜感激。提前致谢。

【问题讨论】:

  • 我收到这个错误:错误:jQuery.timepicker 上不存在方法刷新 ...rn!1;return!0},error:function(a){throw new Error(a)} ,parseHTML:function(a,b,c){v.. 有谁知道我该如何解决这个错误?我认为与 jquery 库有关,但我不确定我应该包含哪些库。

标签: jquery jquery-ui-timepicker


【解决方案1】:

使用option:selected 查找当前选项的值:

$('#end').timepicker({
       'minTime':'8:00 AM',
       'maxTime':'9:00 PM',
       'step':$('#meeting').find('option:selected').val()
     });

[编辑]

其实有很多东西没用,我创建了一个jsfiddle

我将事件绑定更改为使用

以编程方式进行
$('#meeting').bind('change', function () {
     setEndTime();
  });

然后像这样定义 setEndTime:

function setEndTime() {
     var meetingLength = parseInt($('#meeting').find('option:selected').val() || 0),
             selectedTime = $('#start').timepicker('getTime');
      selectedTime.setMinutes(selectedTime.getMinutes() + parseInt(meetingLength, 10), 0);
        $('#end').timepicker('setTime', selectedTime);
  }

然后将#meeting 下拉菜单的初始化更改为第一件事:

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

我还将步长设置为固定值 5,并在 $('#start') 上添加了一个事件:

$('#start').on('changeTime', function () {
    setEndTime();
  });

这样,如果您更改开始时间或持续时间,它会自行更新。

最终版本也改变了结束时间选择器中的步骤: http://jsfiddle.net/20m6b7qz/5/

【讨论】:

  • 我试过了,但出现了脚本错误...我不知道为什么。
  • 错误说脚本不起作用。出现了类似 javascript 警告框的东西。
  • 此页面上的脚本可能正忙,或者可能已停止响应。您现在可以停止脚本,在调试器中打开脚本,或者让脚本继续运行。
  • 看起来这仅适用于 5 分钟的间隔,如果我选择 10 分钟,则结束时间中的第一个值会得到正确的时间,所有其他值仍处于 5 的间隔内。结束时间是否可以基于增量关于区间的长度?
  • 是的,只需删除#start 元素上的事件“changeTime”
猜你喜欢
  • 2018-10-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-06
  • 1970-01-01
  • 2015-12-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多