解決easyui日期時(shí)間框ie的兼容的問題
前幾天項(xiàng)目進(jìn)入最后準(zhǔn)備上線階段,測(cè)試突然發(fā)現(xiàn)使用easyui的datetimebox插件獲取的時(shí)間在ie的時(shí)候無(wú)法獲取到比當(dāng)前時(shí)間還往后的時(shí)間,當(dāng)時(shí)是這么寫的:
$(selector).datetimebox(
{
formatter : function(date) {
var y = date.getFullYear();
var m = date.getMonth() + 1;
var d = date.getDate();
var h = date.getHours(); //獲取當(dāng)前小時(shí)數(shù)(0-23)
var mi = date.getMinutes(); //獲取當(dāng)前分鐘數(shù)(0-59)
var s = date.getSeconds();
var result = y + '-' + (m < 10 ? '0' + m : m) + '-' + (d < 10 ? '0' + d : d)
+ " " + (h < 10 ? '0' + h : h)
+ ":" + (mi < 10 ? '0' + mi : mi);
//console.log(result+"--第127行");
if(second==false){
} else {
result += ":" + (s < 10 ? '0' + s : s);
}
return result;
},
parser : function(s) {
var t = Date.parse(s);
if (!isNaN(t)) {
return new Date(t);
} else {
return new Date();
}
}
});
測(cè)試谷歌瀏覽器等主流瀏覽器都沒有問題,可以把一開始回顯的時(shí)間顯示出來(lái),并可以選擇時(shí)間,但是到ie的時(shí)候,卻發(fā)現(xiàn)選擇不了時(shí)間了,而且回顯的日期也不對(duì),老是當(dāng)前的時(shí)間。調(diào)試了好久,才發(fā)現(xiàn)是ie瀏覽器不支持js的parse()方法。parse()方法是把日期解析轉(zhuǎn)換成該日期的毫秒數(shù)。
formatter是格式化日期的格式。而parser是把解析你格式化的日期,具體寫法看我截的API圖吧:

因?yàn)閜arse在ie中無(wú)法使用~導(dǎo)致在ie下無(wú)法解析顯示出格式化過后日期的時(shí)間。下面是我自己改過的代碼:
$(selector).datetimebox(
{
formatter : function(date) {
var y = date.getFullYear();
var m = date.getMonth()+1;
var d = date.getDate();
var h = date.getHours();
var min = date.getMinutes();
return y+'-'+(m<10?('0'+m):m)+'-'+(d<10?('0'+d):d)+' '+(h<10?('0'+h):h)+':'+min;
},
parser : function(s) {
var ss = (s.split(" "));
var ymd = ss[0].split("-");
var hms = ss[1].split(":");
//console.log(ymd+" "+hms);
var y = parseInt(ymd[0],10);
var m = parseInt(ymd[1],10);
var d = parseInt(ymd[2],10);
var h = parseInt(hms[0],10);
var min = parseInt(hms[1],10);
if (!isNaN(y) && !isNaN(m) && !isNaN(d) && !isNaN(h) && !isNaN(min)){
return new Date(y,m-1,d,h,min);
} else {
return new Date();
}
}
});
formatter格式化的日期是xxxx-xx-xx xx:x。所以在下面parser解析時(shí)先通過日期和時(shí)間之間的空格,把他倆分割開來(lái)。ss[0]==xxxx-xx-xx,ss[1]==xx:xx。這樣的話再通過-和:的分割,把他們分割成一個(gè)個(gè)數(shù)字,這樣的話直接寫入new Date()的參數(shù)里就可以返回正確的日期格式了~~好了,經(jīng)測(cè)試完美兼容ie這個(gè)坑爹的瀏覽器。
今天在使用時(shí)突然發(fā)現(xiàn)這個(gè)方法的一個(gè)bug,那就是如何一開始datetime時(shí)間框沒有數(shù)據(jù)是,會(huì)報(bào)split錯(cuò)誤,所以今天修改了下,加了個(gè)為空判斷:
if(s==""){
return new Date();
}else{
//alert(s);
var ss = (s.split(" "));
var ymd = ss[0].split("-");
var hms = ss[1].split(":");
//console.log(ymd+" "+hms);
var y = parseInt(ymd[0],10);
var m = parseInt(ymd[1],10);
var d = parseInt(ymd[2],10);
var h = parseInt(hms[0],10);
var min = parseInt(hms[1],10);
if (!isNaN(y) && !isNaN(m) && !isNaN(d) && !isNaN(h) && !isNaN(min)){
return new Date(y,m-1,d,h,min);
} else {
return new Date();
}
}
在這要注意s是個(gè)字符串類型~所以不能用s==null來(lái)做判斷條件~
以上這篇解決easyui日期時(shí)間框ie的兼容的問題就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
jQuery實(shí)現(xiàn)div跟隨鼠標(biāo)移動(dòng)
這篇文章主要為大家詳細(xì)介紹了jQuery實(shí)現(xiàn)div跟隨鼠標(biāo)移動(dòng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-05-05
jQuery插件jPaginate實(shí)現(xiàn)無(wú)刷新分頁(yè)
我改了下源碼基本可以在ie7,ie8,ie9正常顯示。以下是部分源碼。發(fā)現(xiàn)用別人的東西出了問題很難搞啊。關(guān)鍵是那個(gè)ie啊。2015-05-05
基于jquery中children()與find()的區(qū)別介紹
本篇文章介紹了,基于jquery中children()與find()的區(qū)別,需要的朋友參考下2013-04-04
jquery ajax請(qǐng)求實(shí)例深入解析
jquery中封裝了一些ajax請(qǐng)求的方法,很實(shí)用,本文將以此引入一個(gè)實(shí)例,對(duì)jquery中ajax請(qǐng)求的方法進(jìn)行詳細(xì)介紹,需要了解更多的朋友可以參考下2012-11-11
jQuery學(xué)習(xí)筆記 操作jQuery對(duì)象 文檔處理
HTML文檔的層次關(guān)系是樹型的,每個(gè)標(biāo)簽可視為樹的各個(gè)節(jié)點(diǎn)。若操作jQuery對(duì)象,使得HTML文檔的結(jié)構(gòu)發(fā)生了改變,就叫做文檔處理2012-09-09
jQuery1.9.1針對(duì)checkbox的調(diào)整方法(prop)
這篇文章主要介紹了jQuery1.9.1針對(duì)checkbox的調(diào)整方法,用prop代替attr2014-05-05
淺析jquery ajax異步調(diào)用方法中不能給全局變量賦值的原因及解決方法
本篇文章主要是對(duì)jquery ajax異步調(diào)用方法中不能給全局變量賦值的原因及解決方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友可以過來(lái)參考下,希望對(duì)大家有所幫助2014-01-01
jquery1.4后 jqDrag 拖動(dòng) 不可用
jquery 升級(jí)到1.4后 jqDrag 拖動(dòng) 不可用的修改方法2010-02-02

