现在的位置: 首页 > easyui > Form > timespinner > 正文
jQuery Easyui timespinner组件值只能调到8的Bug(IE6-IE8)
2015年06月30日 timespinner ⁄ 共 882字 暂无评论 ⁄ 被围观 3,263 views+

现象我就不描述了,在IE6,IE7,IE8三个版本的浏览器环境下使用timespinner组件,会发现timespinner组件的小时和分钟都只能上调到8(不是直接输入值),然后就都从01从头开始了,这显然是不对的。

其原因主要是parseInt函数在IE6-IE8下不够智能的缘故,parseInt函数有两个参数,第二个参数是用于指明目标字符串是何种进制。默认情况下(不指名第二个参数),以"0"开头的字符串认为是八进制,但是"08"并不是一个合法的八进制,因为八进制里面没有8,IE6-IE8这时候就不够智能了,非要当成8进制处理,所以转换逻辑出错,返回0。

要解决这个Bug,可以自己改一下源码,jquery.timespinner.js文件中全字匹配搜索"spin"(jquery.easyui.min.js文件的位置请自行查找),它的值是一个函数,找到函数的定义就可以看到一个parseInt了,没有设置第二个参数,我们把第二个参数设置为10便可以了。以下是1.4.2版本的格式化后的关键代码:

  1. function _1d(_1e, _1f) {
  2.     var _20 = $.data(_1e, "timespinner").options;
  3.     var s = $(_1e).timespinner("getValue");
  4.     var _21 = _20.selections[_20.highlight];
  5.     var s1 = s.substring(0, _21[0]);
  6.     var s2 = s.substring(_21[0], _21[1]);
  7.     var s3 = s.substring(_21[1]);
  8.     //这个位置parseInt需要加上第二个参数10
  9.     var v = s1 + ((parseInt(s2, 10) || 0) + _20.increment * (_1f ? -1 : 1)) + s3;
  10.     $(_1e).timespinner("setValue", v);
  11.     _13(_1e);
  12. }

给我留言

留言无头像?


×