關(guān)于onchange事件在IE和FF下的表現(xiàn)及解決方法
在最近做的一個(gè)項(xiàng)目中,有這么一個(gè)功能點(diǎn):頁面上有一個(gè)checkbox,當(dāng)用戶選擇或者取消選擇該checkbox時(shí)會向后臺發(fā)一個(gè)jsonp請求。當(dāng)時(shí)的實(shí)現(xiàn)是為這個(gè)checkbox添加一個(gè)onchange事件,但結(jié)果卻出人意料,為此,我深入的研究了一下,發(fā)現(xiàn)了onchange事件在IE和FF下的表現(xiàn)存在著以下問題。
問題①:在FF下,當(dāng)改變checkbox的選中狀態(tài)時(shí),會馬上觸發(fā)onchange事件。但在IE下改變checkbox的選中狀態(tài)時(shí),并不會馬上出發(fā)onchange事件,而是需要等待checbox失去焦點(diǎn)時(shí)該事件才會出發(fā)。
為了解決這個(gè)問題,我在checkbox的onclick事件里添加了this.blur()這條語句,這是由于onclick事件是在onchange事件之前執(zhí)行的,因而在Onclick事件中添加this.blur()使checkbox失去焦點(diǎn)便馬上會出發(fā)onchange事件。可如此一來,又遇到了第二個(gè)問題。
問題②:當(dāng)onclick事件和this.blur同時(shí)使用時(shí),在IE下會報(bào)錯(cuò)。
在網(wǎng)上查找了一些資料,終于發(fā)現(xiàn)了onpropertychange這個(gè)事件。該事件在FF下是不會觸發(fā)的。而在IE下,當(dāng)checkbox的選擇狀態(tài)改變時(shí)馬上會出發(fā)。于是,得出了最終的解決方案:在IE下,為checkbox綁定onpropertychange事件,而在FF下,為其綁定onchange事件。
具體代碼實(shí)現(xiàn)如下:
var ua=navigator.userAgent.toLowerCase();
var s=null;
var browser={
msie:(s=ua.match(/msie\s*([\d\.]+)/))?s[1]:false,
firefox:(s=ua.match(/firefox\/([\d\.]+)/))?s[1]:false,
chrome:(s=ua.match(/chrome\/([\d\.]+)/))?s[1]:false,
opera:(s=ua.match(/opera.([\d\.]+)/))?s[1]:false,
safari:(s=ua.match(/varsion\/([\d\.]+).*safari/))?s[1]:false
};
if(browser.msie){//若為IE瀏覽器
checkbox.onpropertychange=function(){
//do someting
}
}
else{
checkbox.onchange=function(){
//do something
}
}
相關(guān)文章
js 獲取本周、上周、本月、上月、本季度、上季度的開始結(jié)束日期
這篇文章主要介紹了js 獲取 本周、上周、本月、上月、本季度、上季度的開始結(jié)束日期,需要的朋友可以參考下2020-02-02JavaScript實(shí)現(xiàn)AOP詳解(面向切面編程,裝飾者模式)
下面小編就為大家分享一篇JavaScript實(shí)現(xiàn)AOP的方法(面向切面編程,裝飾者模式),具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2017-12-12JavaScript+html5 canvas實(shí)現(xiàn)本地截圖教程
這篇文章主要為大家詳細(xì)介紹了JavaScript+html5 canvas實(shí)現(xiàn)本地截圖教程,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-02-02JS簡單實(shí)現(xiàn)文件上傳實(shí)例代碼(無需插件)
注意一下:在chrome瀏覽器下,為了數(shù)據(jù)安全,隱藏的input:file不能trigger “click” 事件。 所以要設(shè)置input:file的透明度達(dá)到隱藏的效果2013-11-11javascript實(shí)現(xiàn)樹形菜單的方法
這篇文章主要介紹了javascript實(shí)現(xiàn)樹形菜單的方法,涉及javascript動態(tài)操作頁面元素與節(jié)點(diǎn)屬性的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-07-07JavaScript及jquey實(shí)現(xiàn)多個(gè)數(shù)組的合并操作
這篇文章主要介紹了JavaScript及jquey實(shí)現(xiàn)多個(gè)數(shù)組的合并操作,在某些情況下還是比較實(shí)用的,需要的朋友可以參考下2014-09-09使用 JavaScript 在沒有插件的情況下輸入文本掩碼的示例詳解
這篇文章主要介紹了使用 JavaScript 在沒有插件的情況下輸入文本掩碼,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-06-06JS笛卡爾積算法與多重?cái)?shù)組笛卡爾積實(shí)現(xiàn)方法示例
這篇文章主要介紹了JS笛卡爾積算法與多重?cái)?shù)組笛卡爾積實(shí)現(xiàn)方法,結(jié)合實(shí)例形式分析了javascript根據(jù)對象或數(shù)組生成笛卡爾積的相關(guān)操作技巧,需要的朋友可以參考下2017-12-12