小编给大家分享一下bootstrap中datetimepicker日期插件在火狐下出现一条报错信息怎么办,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!
为萨嘎等地区用户提供了全套网页设计制作服务,及萨嘎网站建设行业解决方案。主营业务为成都网站设计、成都网站制作、萨嘎网站设计,以传统方式定制建设网站,并提供域名空间备案等一条龙服务,秉承以专业、用心的态度为用户提供真诚的服务。我们深信只要达到每一位用户的要求,就会得到认可,从而选择与我们长期合作。这样,我们也可以走得更远!
日期插件 bootstrap-datetimepicker 在火狐下出现一条报错信息:TypeError: (intermediate value).toString(…).split(…)[1] is undefined
这条错误必然出现,难道没有在 Firefox 下进行测试。
在 Firefox 下查看项目 demo (http://www.malot.fr/bootstrap-datetimepicker/demo.php)可以正常运行,但这个 demo.php 使用的是 2013-3-2 的 datetimepicker,github 项目(https://github.com/smalot/bootstrap-datetimepicker/releases)已经发布到 2017-3-3,这个最新的版本(以及最近的一些版本)在 Firefox 下测试不完善,计算 defaultTimeZone 时虽然没有出错,但给出的结果也不正确。
源代码如下,运行环境 Firefox 51.0.1(32位)
this.defaultTimeZone = (new Date).toString().split('(')[1].slice(0, -1);
this.timezone = options.timezone || this.defaultTimeZone;
// 2.4.4 改进版本
this.timezone = options.timezone || timeZoneAbbreviation();
function timeZoneAbbreviation() {
var abbreviation, date, formattedStr, i, len, matchedStrings, ref, str;
date = (new Date()).toString();
formattedStr = ((ref = date.split('(')[1]) != null ? ref.slice(0, -1) : 0) || date.split(' ');
if (formattedStr instanceof Array) {
matchedStrings = [];
for (var i = 0, len = formattedStr.length; i < len; i++) {
str = formattedStr[i];
if ((abbreviation = (ref = str.match(/\b[A-Z]+\b/)) !== null) ? ref[0] : 0) {
matchedStrings.push(abbreviation);
}
}
formattedStr = matchedStrings.pop();
}
return formattedStr;
}出错原因是 Firefox 下 Date.prototype.toString 返回结果不包含 TimeZone 的文字描述。
2.4.4 改进版本使用的 timeZoneAbbreviation 函数在 Firefox 下返回 true
对 timeZoneAbbreviation 使用的三元表达式依次简化
((abbreviation = (ref = str.match(/\b[A-Z]+\b/)) !== null) ? ref[0] : 0) (abbreviation = (ref = str.match(/\b[A-Z]+\b/)) !== null) (abbreviation = (xxx) !== null) (abbreviation = xxx !== null) abbreviation 必然是布尔值,如果将 matchedStrings.push(abbreviation) 换成 matchedStrings.push(str) 更接近预期值。
推荐使用文末的方案。

解决方案
将 date toString 最后一个空格之后的字符串作为 TimeZone。
// this.defaultTimeZone = (new Date).toString().split('(')[1].slice(0, -1);
this.defaultTimeZone = (new Date + '').split(' ').slice(-1)[0].replace(/\(|\)/g, '');
this.timezone = options.timezone || this.defaultTimeZone;看完了这篇文章,相信你对“bootstrap中datetimepicker日期插件在火狐下出现一条报错信息怎么办”有了一定的了解,如果想了解更多相关知识,欢迎关注创新互联行业资讯频道,感谢各位的阅读!
网站栏目:bootstrap中datetimepicker日期插件在火狐下出现一条报错信息怎么办
网站URL:http://www.jxjierui.cn/article/ggiooi.html


咨询
建站咨询
