使用JEasyUI如何从DateTimeBox和TimeSpinner获得真正的JavaScript日期?

时间:2017-12-12 16:53:49

标签: javascript datetime datepicker datetimepicker jquery-easyui

简单的HTML代码,

<div class="easyui-datebox" style="width:250px;height:30px;"></div>
<div class="easyui-calendar" style="width:250px;height:250px;"></div>
<div class="easyui-timespinner" style="width:250px;height:30px;"></div>
<div class="easyui-datetimebox" style="width:250px;height:30px;"></div>

回调函数,当它们发生变化时,

function setText(raw, parser) {
    var date = '';
    if(parser) {
    try{
        date = parser(raw);
    }
    catch(e) {
        date = e;
    }
  }

    $('.easyui-textbox').textbox(
    'setText',
      'Raw: ' + raw + ', Parsed: ' + date + '\n' + $('.easyui-textbox').textbox('getText'));
}

$('.easyui-datebox').datebox({
    onChange: function(newVal) {
    setText(newVal, $.fn.datebox.defaults.parser);
    }
});

$('.easyui-timespinner').timespinner({
    onChange: function(newVal) {
    setText(newVal, $.fn.timespinner.defaults.parser);
    }
});

$('.easyui-datetimebox').datetimebox({
    onChange: function(newVal) {
    setText(newVal, $.fn.datetimebox.defaults.parser);
  }
});

$('.easyui-calendar').calendar({
    onChange: function(newVal) {
    setText(newVal);
    }
});

使用datebox,其$.fn.datebox.defaults.parser按预期工作,使用calendar,它可以为您完成工作,并且它已经是回调中的日期,以及在current属性中。

但是对于datetimeboxtimespinner,我们在jquery.easyui.min.js中得到了一个模糊的错误,

TypeError: $.data(...) is undefined

这里的文档并不是很好,我无法找到EasyUI的未压缩版本来处理解析器中出错的地方。

所以,正如标题所示,我如何从EasyUI DateTimeBoxTimeSpinner获得真实日期,就像我能够{{1} }和Calendar

1 个答案:

答案 0 :(得分:0)

虽然它仍然是压缩的,但当您查看DateBox的来源时,您会看到问题所在。无论出于何种原因(我将假设它是一个错误),jquery.easyui.min.jsDateTimeBox的解析器都使用代码TimeSpinner,这在适当的上下文中是正常的,但在&#34;静态&#34;中调用函数类似$(this)的方式,$.fn.datetimebox.defaults.parser(...)在此上下文中是错误的 this,它是一个通用this对象,而不是{{1它期待的对象。

Javascript

HTML DOM

是违规行。

要解决此问题,您需要使用Javascript的var _bd1=$(this).datetimebox("spinner").timespinner("options").separator; 方法访问器,这样您就可以设置被调用函数的上下文。

所以,而不是     $ .fn.datetimebox.defaults.parser(的newval)

var opts=$(this).timespinner("options");

而不是     $ .fn.timespinner.defaults.parser(的newval)

call

这样,当内部函数访问$.fn.datetimebox.defaults.parser.call(this, newVal) 时,他们会使用您传递给它们的$.fn.timespinner.defaults.parser.call(this, newVal)

使用

中的更改更新了JSFiddle示例

https://jsfiddle.net/7pm89dp7/1/

现在,对我而言,这似乎仍然很麻烦,我的直觉告诉我必须有另一个更好的方法来做到这一点,但我当然找不到一个!