模式durationflipbox中的jtsage日期框中的Settnig持续时间值

时间:2016-04-07 19:41:00

标签: javascript jquery-mobile datebox

我在日期框中设置时间(持续时间)值时遇到困难。这个问题的简单演示就是我做了类似的事情:

function initDuration() {
  this.d['header Text'] = "Set";
  this.d['headerText'] = "Set Duration";
  var element = 'input#'+this.element[0].id;
  var currentDt = $(element).datebox('getTheDate');
  // ***************
  var dt = $(element).datebox('parseDate', '%H:%M', this.element[0].value); // Where this.element[0].value = "01:00:00"
  // ***************
  $(element).datebox('setTheDate', this.element[0].value);
  $(element).trigger('datebox', { 'method': 'doset' });
}

dt只包含当前日期/时间;即jtsage不喜欢它。元素被定义为(在玉中):

input.Duration(type="text" name="duration" form="form#{i}" 
    id="duration#{i}" value="#{map[i].duration}" data-role="datebox"
    data-options=
    '{"mode":"durationflipbox", "overrideDurationOrder":["h","i"],'
    +' "overrideTimeFormat": "%l:%M", "minuteStep":15, "beforeOpenCallback": "initDuration"}')

此外,我不确定如何更改翻箱标题。 initDuration()中的第二行设置按钮的文本,但标题仍然显示“设置时间”。

由于第一个问题,initDuration()中的最后两行不能达到我想要的效果。即他们只是使用当前时间,无论发生什么。

1 个答案:

答案 0 :(得分:0)

我很抱歉这将是一个不完整的答案,但是评论的时间太长了。

对于标题 - 给" overrideHeaderText"一个镜头而不是。我完全有可能在某些时候搞砸了它,这不是我在任何一个项目中使用的功能。

下一步...

var dt = $(element).datebox('parseDate', '%H:%M', this.element[0].value); // Where this.element[0].value = "01:00:00"

我想我正确地读到你了#34; dt"并不包含您的期望。这是因为01:00:00!=%H:%M - 要阅读此格式"格式",您需要使用"%H:%M: %S"或者"%H:%M:00" (后者忽略秒字段)。

那就是说,我认为你想要做的是设定一个持续时间,这有点不同。有几种方法可以做到 - 而且我注意到在功能上没有很多支持。最简单的方法是设置输入的值,让datebox处理数学 - 只需要知道输入到输入的格式必须与输出格式完全相同 - 它会在控件打开时读取它(或者如果控件以内联方式显示,则进行初始化 - 如果您正在内联显示,并设置值"稍后",则可以使用“刷新”方法对其进行更新。 / p>

对于它的价值,如果你真的,真的,真的想要使用setTheDate方法,持续时间模式通过比较" theDate" (公开日期,即setTheDate,getTheDate),内部initDate - 未公开API,但可在此处找到:

$(element).data('jtsage-datebox').initDate 

所以,在伪代码中,持续一个小时

myNewDate = $(element).data( 'jtsage-datebox' ).initDate;
myNewDate.setHour( myNewDate.getHour() + 1 );
$(element).datebox( 'setTheDate', myNewDate );