demo 效果图如上

label是html5特有的,是定义 input 元素的标注。
凡是input前面要有个label标识下,label和input真是一对好兄弟啊。
<label> 标签的 for 属性应当与相关元素的 id 属性相同。

            <div class="blocks mgtop0 brdbtm0 clearFix">
<div class="addareaBox">
<label class="stateTitle"><em class="redStar">*</em>国家</label>
<ul class="listInfoUl">
<li id="states" class="statesLi">
<label class="arealabel" for="areaInput0">
<input type="checkbox" name="areaInputConts" id="areaInput0" value="9">法国</label>
<label class="arealabel" for="areaInput1">
<input type="checkbox" name="areaInputConts" id="areaInput1" value="10">比利时</label>
</li>
</ul>
</div> <div class="addareaBox">
<label><em class="redStar">*</em>城市</label>
<ul class="listInfoUl">
<li id="areaInput0-citys" class="citysLi">
<label class="arealabel all">法国</label>
<label class="arealabel" for="areaInput0-citys-Input0">
<input type="checkbox" name="areaInputCitys" id="areaInput0-citys-Input0" value="27">尼斯</label>
<label class="arealabel" for="areaInput0-citys-Input1">
<input type="checkbox" name="areaInputCitys" id="areaInput0-citys-Input1" value="26">巴黎</label>
<label class="arealabel" for="areaInput0-citys-Input2">
<input type="checkbox" name="areaInputCitys" id="areaInput0-citys-Input2" value="28">马赛</label>
</li>
<li id="areaInput1-citys" class="citysLi">
<label class="arealabel all">比利时</label>
<label class="arealabel" for="areaInput1-citys-Input0">
<input type="checkbox" name="areaInputCitys" id="areaInput1-citys-Input0" value="82">安特卫普</label>
<label class="arealabel" for="areaInput1-citys-Input1">
<input type="checkbox" name="areaInputCitys" id="areaInput1-citys-Input1" value="83">西弗兰德</label>
<label class="arealabel" for="areaInput1-citys-Input2">
<input type="checkbox" name="areaInputCitys" id="areaInput1-citys-Input2" value="84">东弗兰德</label>
</li>
</ul>
</div>
</div>

通过lable来控制 input的样式和选择状态。

.newCityguide .addareaBox li .arealabel.checked {
background-color: #e93854;
color: #fff;
}
.newCityguide .addareaBox li .arealabel {
display: inline-block;
margin-bottom: 0.5em;
margin-right: 0.5em;
padding-bottom: 0.25em;
padding-left: 0.5em;
padding-right: 0.5em;
padding-top: 0.25em;
width: auto;
}

通过下面两行,获取input的上一级 label
                    thisstatelabelDoms = $(".arealabel");
                    console.log("thisstatelabelDoms:"+thisstatelabelDoms);
然后通过绑定click事件,实现选择与否的状态切换
thisstatelabelDoms.click(function(){});

核心代码如下:

//也不是没有bug,好像初始加载后,头次需要点两次才能实现checked状态的切换。
                var thisstatelabelDoms;
                if(conid){
                    thisstatelabelDoms = $(conid).find(".arealabel");
                    console.log("thisstatelabelDoms-confid:"+thisstatelabelDoms);
                }else{
                    //input 上一级 label
                    thisstatelabelDoms = $(".arealabel");
                    console.log("thisstatelabelDoms:"+thisstatelabelDoms);
                }

//国家的父ID是states ;城市父ID是areaInput0-citys
var statesId = $(this).parent().attr("id");
var thisInpt = $(this).find("input[type=checkbox]");
//状态
var thisinptckeck= thisInpt.attr("checked");
var contname=$(this).parent().html();
if(thisinptckeck=="checked"){
$(this).addClass("checked");
if(statesId=="states"){
var thisInptId = thisInpt.attr("id");
$("#"+thisInptId+"-citys").show();
}
$("#inputHidden").val(getCheckboxV);
}else{
$(this).removeClass("checked");
if(statesId=="states"){
var thisInptId = thisInpt.attr("id");
$("#"+thisInptId+"-citys").hide();
$("#"+thisInptId+"-citys").find("label input[type=checkbox]").each(function(k,n){
$(n).attr("checked",false);
$(n).parent().removeClass("checked");
});
}
$("#inputHidden").val(getCheckboxV);
}

通过getCheckboxV函数,遍历获取选择的国家和城市ID

function getCheckboxV(selecter){
var thisSelecterDoms;
var thisSelecterContDoms;
var thisStr=""; if(selecter){
thisSelecterDoms = $(selecter);
$(thisSelecterDoms).each(function(){
if($(this).find("input[type=checkbox]:checked").val() != undefined){
thisStr+=$(this).find("input[type=checkbox]:checked").val()+",";
}
}); }else{
//cont id
//注意同类input的写法$("input[name=areaInputConts]:checked"),name相同 checked状态相同
thisSelecterContDoms = $("input[name=areaInputConts]:checked");
$(thisSelecterContDoms).each(function(){
if($(this).val() != undefined){
//判断国家下是否有城市,没选城市flag=true,勾选了flag=false
var flag=true;
var thisContId = $(this).attr("id");
$("#"+thisContId+"-citys").find("label input[type=checkbox]").each(function(k,n){
if($(n).attr("checked")=="checked") {
flag=false;
}
}
);
if(flag){
thisStr+=$(this).val()+",";
}
}
});
//city id
thisSelecterDoms = $("input[name=areaInputCitys]:checked");
$(thisSelecterDoms).each(function(){
if($(this).val() != undefined){
thisStr+=$(this).val()+",";
}
});
}
return thisStr;
}

也不是没有bug,好像初始加载后,头次需要点两次才能实现checked状态的切换。出现这样的问题,是因为click绑定在了label上了,改绑定到input上就不是响应两次了。。

html5中的input和label写法与取值的更多相关文章

  1. php的form中元素name属性相同时的取值问题

    php的form中元素name属性相同时的取值问题:修改元素的名称,在名称后面加上 '[]',然后取值时即可得array()数组. 一.以复选框为例: <html> <head> ...

  2. 在LoadRunner中从数组类型的参数随机取值的方法

    在LoadRunner中从数组类型的参数随机取值的方法 使用web_reg_save_param做关联后,有时候会有多个匹配值. 为了模仿用户行为随机取一个值为后续transcation所用,可以使用 ...

  3. html5中关于input使用方法的改变

    測试环境:Firefox 10.0.Safari 5.1.Opera 11.61, Chrome 14.0.835.202 自己測试的时候都有写在form表单里,有提交button验证.由于对博客使用 ...

  4. Java 中日期的几种常见操作 —— 取值、转换、加减、比较

    Java 的开发过程中免不了与 Date 类型纠缠,准备总结一下项目经常使用的日期相关操作,JDK 版本 1.7,如果能够帮助大家节约那么几分钟起身活动一下,去泡杯咖啡,便是极好的,嘿嘿.当然,我只提 ...

  5. Gridview中DataKeyNames 设置多个主键 取值

    1.设置DataKeyNames a.F4  在属性面板中设置   多个值以逗号隔开  例如id,mane,sex b.通过后台代码 this.gridview.DataSource = Bind() ...

  6. Handlebars.js中集合(list)通过中括号的方式取值

    有这么一个需求,在一个table中,tr是通过each取值,取出的值要与table标题相对应,如何实现?例如: <table> <thead> <tr> {{#ea ...

  7. 聊聊 Java 中日期的几种常见操作 —— 取值、转换、加减、比较

    Java 的开发过程中免不了与 Date 类型纠缠,准备总结一下项目经常使用的日期相关操作,JDK 版本 1.7,如果能够帮助大家节约那么几分钟起身活动一下,去泡杯咖啡,便是极好的,嘿嘿.当然,我只提 ...

  8. DataList:HTML5中的input输入框自动提示宝器

    DataList的作用是在你往input输入框里输入信息时,根据你敲进去的字母,自动显示一个提示下列列表,很像百度或谷歌的搜索框的自动提示,在飞机票火车票的搜索页面上也有这样的效果.它是HTML5里新 ...

  9. HTML5中的input type为file控件限制上传文件类型及扩展

    简单介绍 input file控件限制上传文件类型如下:1.文件类型中间用,分开:2.html和htm这样的要写成两个: 3实例: <input type="file" na ...

随机推荐

  1. Python数据可视化系列-02-pyecharts可视化非常cool

    pyecharts介绍 pyecharts网站 Pyecharts生成的图像,动态效果非常cool.在HTML上展示很是perfect.matplotlib用于科研,但是pyecharts用于展示和讲 ...

  2. Python图形编程探索系列-05-用控制变量构建对话程序

    跳转到自己的博客 控制变量 变量 符号 意义 默认值 1 var = tk.BooleanVar() 布尔型 0 2 var = tk.StringVar() 字符串控制变量 空字符串 3 var = ...

  3. javascript加密PHP解密---jsencrypt

    今天偶然发现jsencrypt这玩意,之前做"直播室聊天"时 数据传输明文问题没解决; 一直苦苦寻找技术解决方案今天勉强找了个: 原理:javascript加密PHP解密: 完全依 ...

  4. Eclipse 4.5.0 离线安装 Veloeclipse 插件

    下载 Veloeclipse 在 Eclipse eclipse-jee-mars-R-win32-x86_64 版本 4.5.0,Build id 为 20150621-1200,离线安装 Velo ...

  5. [Python设计模式] 第11章 迪米特法则——最少知识原则

    github地址:https://github.com/cheesezh/python_design_patterns 迪米特法则 迪米特法则(LoD),也叫最少知识原则,如果两个类不必彼此直接通信, ...

  6. cmake mac 安装

    Cmake 在mac上的安装 cmake 官网:https://cmake.org/ 以源码方式安装 1. 下载源码:https://cmake.org/files/v3.9/cmake-3.9.0- ...

  7. grid - 通过网格线号码来定位网格项目

    网格线实际上是代表线的开始.结束. 两者之间就是网格列或行. 以下css仅对子元素生效 ,具体详情可以看后面示例 grid-row-start: 2; grid-row-end: 3; grid-co ...

  8. 〖Java〗Eclispe安装和使用viplugin

    习惯了VIM的操作,每次打开Eclipse都习惯性的按下 hjkl: 感觉蛋疼了使用一下VIPlugin,发现给编码速度造成了成吨的伤害- 这个插件对于习惯于使用VIM的程序员来说,简直太有必要了.. ...

  9. java webdriver的api的封装

    我们来看一下官网提供的代码写法,即最原始的写法: driver.findElement(By.id("kw")).click() 这样写是没任何问题的,但这样没有把元素对象,数据, ...

  10. StringUtils类中isEmpty与isBlank的区别

    org.apache.commons.lang.StringUtils类提供了String的常用操作,最为常用的判空有如下两种isEmpty(String str)和isBlank(String st ...