解决包含在label标签下的checkbox在ie8及以下版本点击事件无效果兼容的问题
问题描述:
在IE8及以下版本时,点击label标签无法自动触发checkbox的click事件,导致无法产生希望的效果。
原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());
}
})
});
Checkbox点击事件JS代码
根本原因:因为ie8不支持事件传递,当点击蓝色的框框时,触发了label的click事件而并没有触发其中checkbox标签的click事件。
解决方式:我们可以修改html代码,将label标签和checkbox标签通过id属性关联,同时给label加上name属性,将事件处理放在label标签上。
新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());
}
})
});
Label点击事件JS代码
最后加一下IE版本的判断代码就完美了。
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());
}
})
});
}
完整JS代码
初来乍到,这是本人在开发过程中遇到的小问题,简单总结了一下,分享给请大家,写的不好请多多见谅,转载请注明出处,谢谢!!
解决包含在label标签下的checkbox在ie8及以下版本点击事件无效果兼容的问题的更多相关文章
- jQuery on()方法绑定动态元素的点击事件无响应的解决办法
$('#check_all').on('click' , function(){ alert(1); }); $("#yujinlist").append(html); count ...
- [HTML5]label标签使用以及建议
for 属性规定 label 与哪个表单元素绑定. 隐式和显式的联系 标记通常以下面两种方式中的一种来和表单控件相联系:将表单控件作为标记标签的内容,这样的就是隐式形式,或者为 <label&g ...
- 解决label点击事件触发两次问题
问题描述: 通常,为了用户体验,我们点击单选框或者复选框后面文字,即可选中当前项.代码如下: <label> <input type="radio" name=& ...
- HTML<label> 标签的 for 属性
定义和用法 for 属性规定 label 与哪个表单元素绑定. 隐式和显式的联系 标记通常以下面两种方式中的一种来和表单控件相联系:将表单控件作为标记标签的内容,这样的就是隐式形式,或者为 <l ...
- 说说HTML5中label标签的可访问性问题——张鑫旭
一.开篇叨叨 一般稍微有些经验的页面制作人员都知道label标签可以优雅地扩大表单控件元素的点击区域,例如,单纯的单选框点击区域就鼻屎那么大的地方,经常会点不到位置.因此,label标签的使用对于提高 ...
- label标签的可访问性
与表单元素关联的方法(IE6下label标签包裹控件的方法是不顶用的): 1 使用for和id关联控件 <p><label for="test">标签< ...
- html——a标签添加点击事件,火狐浏览器直接显示0
一.问题描述 给一个a标签添加了点击事件,页面直接给了0如下图 二.问题解决 后台调试模式下,发现也进了后台方法,也返回了页面. 于是想到先把页面里大部分内容去掉,去掉所有js,查看是否是部分代码有问 ...
- cocos2d-x JS 获取当前系统时间(解决屏幕双击点击事件)
记录一下,好开心,感觉今天自己又学到东西了,对于屏幕双击事件本来还毫无头绪的,今天得以解决总算没白费加班,其实原理很简单:就是在点击事件里做一个判断,这个判断就是需要获取当前系统的时间的毫秒差,第一次 ...
- Android Listview中Button按钮点击事件冲突解决办法
今天做项目时,ListView中含有了Button组件,心里一早就知道肯定会有冲突,因为以前就遇到过,并解决过,可惜当时没有记录下来. 今天在做的时候,继续被这个问题郁闷了一把,后来解决后,赶紧来记录 ...
随机推荐
- 简易的CRM系统案例之Struts2+Hibernate3+JSP+MySQL版本
改造上一版本的DAO层 简易的CRM系统案例之Struts2+JSP+MySQL版本 src文件下hibernate.cfg.xml <!DOCTYPE hibernate-configurat ...
- [Java复习] 缓存Cache part2
7. Redis持久化有哪几种方式?不同的持久化机制都有什么优缺点?持久化机制具体底层是如何实现的? 为什么要持久化? 如果只是存在内存里,如果redis宕机再重启,内存数据就丢失了,所以要用持久化机 ...
- SQL语句里合并两个select查询结果
SQL UNION 操作符UNION 操作符用于合并两个或多个 SELECT 语句的结果集. 请注意,UNION 内部的 SELECT 语句必须拥有相同数量的列.列也必须拥有相似的数据类型.同时,每条 ...
- KDChart example
/******************************************************************************** ** Form generated ...
- 创建IDOC
第一步:WE31 创建IDOC所包含的字段. 第二步:WE30 创建IDOC 把Segment分配给IDOC 第三步:WE81 创建信息类型 第四步:WE82 把IDOC类型与信息类型对应. 第五步: ...
- mysql为字段添加或删除自增属性
删除自增属性: ALTER TABLE `members` CHANGE uid uid INT(10) UNSIGNED NOT NULL ; 添加自增属性: ALTER TABLE `member ...
- IE和火狐的css兼容性问题
CSS对浏览器器的兼容性具有很高的价值,通常情况下IE和Firefox存在很大的解析差异,这里介绍一下兼容要点. 1.DOCTYPE 影响 CSS 处理 2.FF: div 设置 margin-le ...
- ELK之elasticsearch7版本集群设置
ELK7版本搭建参考:https://www.cnblogs.com/minseo/p/10948632.html node-1已经安装配置好 配置文件如下 [root@salt-test conf. ...
- 遇到引入的JS不起作用
1.js的加载是有先后顺序的,并且不能重复引入,重复引入的只有最后一个起作用 2.在使用ligerUI的时候一定要先引用jQuery再引用ligerUI 3.在使用jQuery时遇到变量名未定义的主要 ...
- js前端 多条件筛选查询
一.前言 在做项目中,遇到多条件筛选案例.实现完成以后,我将我做的代码分享在这里,希望可以帮助到其他朋友. 二.效果截图 三.实现代码 首先我先类型.类别.职位分成三块来处理,如果传到服务器端的话,就 ...