解決包含在label標(biāo)簽下的checkbox在ie8及以下版本點(diǎn)擊事件無效果兼容的問題
問題描述:
在IE8及以下版本時,點(diǎn)擊label標(biāo)簽無法自動觸發(fā)checkbox的click事件,導(dǎo)致無法產(chǎn)生希望的效果。
原HTML代碼:
<div class="col-sm-2">
<label><input type="checkbox" id="chk_sqjc" value="申請檢查" name="menu" class="cbr cbr-blue">申請檢查</label>
</div>
$("input:checkbox[name='menu']").each(function (index, element) {
$(this).click(function () {
if ($(this).attr("checked") != undefined) {
$(this).removeAttr("checked");
var menues = $("#selmenues").val();
var arrMenues = menues.split(',');
if (arrMenues.length > 0) {
arrMenues.forEach(function (val) {
//console.log(element.value);
if (element.value == val) {
arrMenues.splice($.inArray(val, arrMenues), 1);
}
});
menues = "";
arrMenues.forEach(function (val) {
menues += val + ',';
});
menues = menues.substring(0, menues.length - 1)
//console.log(menues);
$("#selmenues").val(menues);
//console.log($("#selmenues").val());
}
} else {
$(this).attr("checked", "checked");
var menues = $("#selmenues").val();
var arrMenues = menues.split(',');
if (arrMenues.length > 0) {
arrMenues.push($(this).val());
menues = "";
arrMenues.forEach(function (val) {
menues += val + ',';
});
menues = menues.substring(0, menues.length - 1)
//console.log(menues);
}
else {
menues += $(this).val() + ',';
}
$("#selmenues").val(menues);
//console.log($("#selmenues").val());
}
})
});
根本原因:因?yàn)閕e8不支持事件傳遞,當(dāng)點(diǎn)擊藍(lán)色的框框時,觸發(fā)了label的click事件而并沒有觸發(fā)其中checkbox標(biāo)簽的click事件。
解決方式:我們可以修改html代碼,將label標(biāo)簽和checkbox標(biāo)簽通過id屬性關(guān)聯(lián),同時給label加上name屬性,將事件處理放在label標(biāo)簽上。
新HTML代碼:
<div class="col-sm-2"> <label name="lbl_menu" id="sqjc"><input type="checkbox" id="chk_sqjc" value="申請檢查" name="menu" class="cbr cbr-blue">申請檢查</label> </div>
$("label[name='lbl_menu']").each(function (index, element) {
$(this).click(function () {
//console.log($('input#chk_' + this.id).attr("checked"));
if ($('input#chk_' + this.id).attr("checked") != undefined) {
$('input#chk_' + this.id).removeAttr("checked");
//$('input#chk_' + this.id).trigger("click");
$('div').filter('.cbr-replaced.cbr-blue').eq(index).removeClass('cbr-checked');
var menues = $("#selmenues").val();
var arrMenues = menues.split(',');
if (arrMenues.length > 0) {
arrMenues.forEach(function (val) {
//console.log(element.value);
if (element.value == val) {
arrMenues.splice($.inArray(val, arrMenues), 1);
}
});
menues = "";
arrMenues.forEach(function (val) {
menues += val + ',';
});
menues = menues.substring(0, menues.length - 1)
//console.log(menues);
$("#selmenues").val(menues);
//console.log($("#selmenues").val());
}
} else {
$('input#chk_' + this.id).attr("checked", "checked");
// console.log($('input#chk_' + this.id).attr("checked"));
//$('input#chk_' + this.id).trigger("click");
// console.log($('.cbr-replaced.cbr-blue')[index]);
$('div').filter('.cbr-replaced.cbr-blue').eq(index).addClass('cbr-checked');
var menues = $("#selmenues").val();
var arrMenues = menues.split(',');
if (arrMenues.length > 0) {
arrMenues.push($('input#chk_' + this.id).val());
menues = "";
arrMenues.forEach(function (val) {
menues += val + ',';
});
menues = menues.substring(0, menues.length - 1)
//console.log(menues);
}
else {
menues += $('input#chk_' + this.id).val() + ',';
}
$("#selmenues").val(menues);
//console.log($("#selmenues").val());
}
})
});
最后加一下IE版本的判斷代碼就完美了。
完整JS代碼
var DEFAULT_VERSION = 8.0;
var ua = navigator.userAgent.toLowerCase();
var isIE = ua.indexOf("msie") > -1;
var safariVersion;
if (isIE) {
safariVersion = ua.match(/msie ([\d.]+)/)[1];
}
if (safariVersion <= DEFAULT_VERSION) {
$("label[name='lbl_menu']").each(function (index, element) {
$(this).click(function () {
//console.log($('input#chk_' + this.id).attr("checked"));
if ($('input#chk_' + this.id).attr("checked") != undefined) {
$('input#chk_' + this.id).removeAttr("checked");
//$('input#chk_' + this.id).trigger("click");
$('div').filter('.cbr-replaced.cbr-blue').eq(index).removeClass('cbr-checked');
var menues = $("#selmenues").val();
var arrMenues = menues.split(',');
if (arrMenues.length > 0) {
arrMenues.forEach(function (val) {
//console.log(element.value);
if (element.value == val) {
arrMenues.splice($.inArray(val, arrMenues), 1);
}
});
menues = "";
arrMenues.forEach(function (val) {
menues += val + ',';
});
menues = menues.substring(0, menues.length - 1)
//console.log(menues);
$("#selmenues").val(menues);
//console.log($("#selmenues").val());
}
} else {
$('input#chk_' + this.id).attr("checked", "checked");
// console.log($('input#chk_' + this.id).attr("checked"));
//$('input#chk_' + this.id).trigger("click");
// console.log($('.cbr-replaced.cbr-blue')[index]);
$('div').filter('.cbr-replaced.cbr-blue').eq(index).addClass('cbr-checked');
var menues = $("#selmenues").val();
var arrMenues = menues.split(',');
if (arrMenues.length > 0) {
arrMenues.push($('input#chk_' + this.id).val());
menues = "";
arrMenues.forEach(function (val) {
menues += val + ',';
});
menues = menues.substring(0, menues.length - 1)
//console.log(menues);
}
else {
menues += $('input#chk_' + this.id).val() + ',';
}
$("#selmenues").val(menues);
//console.log($("#selmenues").val());
}
})
});
}
else {
$("input:checkbox[name='menu']").each(function (index, element) {
$(this).click(function () {
if ($(this).attr("checked") != undefined) {
$(this).removeAttr("checked");
var menues = $("#selmenues").val();
var arrMenues = menues.split(',');
if (arrMenues.length > 0) {
arrMenues.forEach(function (val) {
//console.log(element.value);
if (element.value == val) {
arrMenues.splice($.inArray(val, arrMenues), 1);
}
});
menues = "";
arrMenues.forEach(function (val) {
menues += val + ',';
});
menues = menues.substring(0, menues.length - 1)
//console.log(menues);
$("#selmenues").val(menues);
//console.log($("#selmenues").val());
}
} else {
$(this).attr("checked", "checked");
var menues = $("#selmenues").val();
var arrMenues = menues.split(',');
if (arrMenues.length > 0) {
arrMenues.push($(this).val());
menues = "";
arrMenues.forEach(function (val) {
menues += val + ',';
});
menues = menues.substring(0, menues.length - 1)
//console.log(menues);
}
else {
menues += $(this).val() + ',';
}
$("#selmenues").val(menues);
//console.log($("#selmenues").val());
}
})
});
}
總結(jié)
以上所述是小編給大家介紹的解決包含在label標(biāo)簽下的checkbox在ie8及以下版本點(diǎn)擊事件無效果兼容的問題,希望對大家有所幫助,如果大家有任何疑問歡迎給我留言,小編會及時回復(fù)大家的!
相關(guān)文章
javascript實(shí)現(xiàn)生成并下載txt文件方式
這篇文章主要介紹了javascript實(shí)現(xiàn)生成并下載txt文件方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-09-09
javascript 窗口加載蒙板 內(nèi)嵌網(wǎng)頁內(nèi)容
用于在現(xiàn)有窗口上加載蒙板,在蒙板內(nèi)在嵌入其他頁面內(nèi)容2010-11-11
配置Grunt的Task時通配符支持和動態(tài)生成文件名問題
這篇文章主要介紹了配置Grunt的Task時通配符支持和動態(tài)生成文件名問題,需要的朋友可以參考下2015-09-09
EasyUI閃屏EasyUI頁面加載提示(原理+代碼+效果圖)
這篇文章主要介紹了EasyUI閃屏EasyUI頁面加載提示(原理+代碼+效果圖)的相關(guān)資料,需要的朋友可以參考下2016-02-02
Axios+Spring?Boot實(shí)現(xiàn)文件上傳和下載
這篇文章主要為大家詳細(xì)介紹了Axios+Spring?Boot實(shí)現(xiàn)文件上傳和下載,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-08-08
JavaScript實(shí)現(xiàn)2種常見的抽獎效果實(shí)例代碼
抽獎系統(tǒng)是一種常見的功能,可以用于各種活動和網(wǎng)站,這篇文章主要給大家介紹了關(guān)于JavaScript實(shí)現(xiàn)2種常見的抽獎效果的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-01-01

