1.最近在写js代码完成一个前段DOM操作的函数时,自己错误的使用了if..else..控制体。为什么是错误的呢?看看我的

代码你就明白了:

  document.getElementsByClassName('eButton')[0].onclick=function(){
var checked=document.getElementsByClassName('checked');
var eButton=document.getElementsByClassName('eButton')[0];
if(checked.length==0){
alert('请选择要编辑的联系人!');
}else{
if(checked.length >2){
alert('每次编辑只能选择一条记录');
}else{
if(checked[0].childNodes[0].id=='check-all'){
var email=checked[1].parentNode.nextElementSibling.nextElementSibling.innerHTML;
var name=checked[1].parentNode.nextElementSibling.innerHTML;
document.getElementsByClassName('edit_contact_name')[0].value=name;
document.getElementsByClassName('edit_contact_email')[0].value=email;
var group=checked[1].parentNode.nextElementSibling.nextElementSibling.nextElementSibling
if(group.innerHTML !="default"){
var group_id=group.getAttribute('group_id')
document.getElementsByClassName('edit_contact_group_name')[0].value=id;
}
$('#edit_contact').modal();
}else{
if(checked.length ==2){
alert('每次编辑只能选择一条记录');
}else{
var email=checked[0].parentNode.nextElementSibling.nextElementSibling.innerHTML;
var name=checked[0].parentNode.nextElementSibling.innerHTML;
document.getElementsByClassName('edit_contact_name')[0].value=name;
document.getElementsByClassName('edit_contact_email')[0].value=email;
var group=checked[0].parentNode.nextElementSibling.nextElementSibling.nextElementSibling
if(group.innerHTML !="default"){
var group_id=group.getAttribute('group_id')
document.getElementsByClassName('edit_contact_group_name')[0].value=id;
}
$('#edit_contact').modal();
}
}
}
}
};

哈哈,看到自己写的这些代码,突然感觉这个函数一定很厉害。整个函数被if..else..搞得乱七八糟的,开始思考为什么当时要用if..else

,其实当时只是考虑到这个逻辑中有大概三四种不同的条件,要执行三四种运算,而且每次只能执行一种情况(执行完就到函数结尾),这些就是程序的执行流程。有了这个流程,自己开始考虑怎么把代码改改,改的一目了然,改的易于维护。这个时候自己自然而言的想到了"return"这个关键字,使用”return“后就有了下面的代码:

document.getElementsByClassName('eButton')[0].onclick=function(){
var checked=document.getElementsByClassName('checked');
var eButton=document.getElementsByClassName('eButton')[0];
if(checked.length==0){
alert('请选择要编辑的联系人!');
return;
}
if(checked.length ==1){
var email=checked[0].parentNode.nextElementSibling.nextElementSibling.innerHTML;
var name=checked[0].parentNode.nextElementSibling.innerHTML;
document.getElementsByClassName('edit_contact_name')[0].value=name;
document.getElementsByClassName('edit_contact_email')[0].value=email;
var group=checked[0].parentNode.nextElementSibling.nextElementSibling.nextElementSibling
if(group.innerHTML !="default"){
var group_id=group.getAttribute('group_id')
document.getElementsByClassName('edit_contact_group_name')[0].value=id;
}
$('#edit_contact').modal();
return;
}
if(checked.length ==2){
if(checked[0].childNodes[0].id=='check-all'){
var email=checked[1].parentNode.nextElementSibling.nextElementSibling.innerHTML;
var name=checked[1].parentNode.nextElementSibling.innerHTML;
document.getElementsByClassName('edit_contact_name')[0].value=name;
document.getElementsByClassName('edit_contact_email')[0].value=email;
var group=checked[1].parentNode.nextElementSibling.nextElementSibling.nextElementSibling
if(group.innerHTML !="default"){
var group_id=group.getAttribute('group_id')
document.getElementsByClassName('edit_contact_group_name')[0].value=id;
}
$('#edit_contact').modal();
return;
}
alert('每次编辑只能选择一条记录');
return;
}
if(checked.length >2){
alert('每次编辑只能选择一条记录');
}
};

下面这些条件罗列起来代码就清晰多了:

1.checked.length ==0

2.checked.length ==1

3.checked.length ==2

4.checked.length > 2

接下来把重复的代码封装到函数中(去除重复)得到代码:

function get_edit_modal_content(node_num,checked){
var email=checked[node_num].parentNode.nextElementSibling.nextElementSibling.innerHTML;
var name=checked[node_num].parentNode.nextElementSibling.innerHTML;
var contact_id=checked[node_num].parentNode.nextElementSibling.getAttribute('contact_id')
var regular_name=/[\u4E00-\u9FA5\uF900-\uFA2D\w]*/;
name=regular_name.exec(name)[0];
document.getElementsByClassName('edit_contact_id')[0].value=contact_id;
document.getElementsByClassName('edit_contact_name')[0].value=name;
document.getElementsByClassName('edit_contact_email')[0].value=email;
var group=checked[node_num].parentNode.nextElementSibling.nextElementSibling.nextElementSibling
if(group.innerHTML !="default"){
var group_id=group.getAttribute('group_id')
document.getElementsByClassName('edit_contact_group_name')[0].value=group_id;
}
}
document.getElementsByClassName('eButton')[0].onclick=function(){
var checked=document.getElementsByClassName('checked');
if(checked.length==0){
alert('请选择要编辑的联系人!');
return;
}
if(checked.length==1){
get_edit_modal_content(0,checked);
$('#edit_contact').modal();
return;
}
if(checked.length==2){
if(checked[0].childNodes[0].id=='check-all'){
get_edit_modal_content(1,checked);
$('#edit_contact').modal();
return;
}
alert('每次编辑只能选择一条记录');
return;
}
if(checked.length >2){
alert('每次编辑只能选择一条记录');
return;
}
};

最终代码变得简洁易于维护了,看着也赏心悦目了,嘎嘎.......

if...else..的错误用法的更多相关文章

  1. 避免常见的6种HTML5错误用法

    一.不要使用section作为div的替代品 人们在标签使用中最常见到的错误之一就是随意将HTML5的<section>等价于<div>——具体地说,就是直接用作替代品(用于样 ...

  2. 关于LayoutInflater的错误用法(警告提示:Avoid passing null as the view root)

    项目中用LayoutInflater加载xml布局一直飘黄警告,上网搜了搜发现没有解释明白的,到是找到了一篇外国的博文,但是竟然是英文...幸好以前上学时候的英语不是很差加上谷歌的辅助,简单翻一下!  ...

  3. 一直被用错的6种SQL 错误用法

    一直被用错的6种SQL 错误用法 1.LIMIT 语句 2.隐式转换 3.关联更新.删除 4.EXISTS语句 5.条件下推 6.提前缩小范围 sql语句的执行顺序: FROM ON JOIN WHE ...

  4. C++成员函数指针错误用法警示(成员函数指针与高性能的C++委托,三篇),附好多评论

    今天做一个成绩管理系统的并发引擎,用Qt做的,仿照QtConcurrent搞了个模板基类.这里为了隐藏细节,隔离变化,把并发的东西全部包含在模板基类中.子类只需注册需要并发执行的入口函数即可在单独线程 ...

  5. 8种常见的SQL错误用法

    常见SQL错误用法 1. LIMIT 语句 分页查询是最常用的场景之一,但也通常也是最容易出问题的地方.比如对于下面简单的语句,一般DBA想到的办法是在type, name, create_time字 ...

  6. MySQL常见的8种SQL错误用法

    MySQL常见的8种SQL错误用法 前言 MySQL在2016年仍然保持强劲的数据库流行度增长趋势.越来越多的客户将自己的应用建立在MySQL数据库之上,甚至是从Oracle迁移到MySQL上来.但也 ...

  7. spring @Transactional的自调用失效问题与事务的典型错误用法剖析

    @Transactional的自调用失效问题 有时候配置了注解@Transactional,但是它会失效,这里要注意一些细节问题,以避免落入陷阱. 注解@Transaction的底层实现是Spring ...

  8. MySQL · 性能优化 · MySQL常见SQL错误用法(转自-阿里云云栖社区)

    作者:阿里云云栖社区链接:https://zhuanlan.zhihu.com/p/26043916来源:知乎著作权归作者所有,转载请联系作者获得授权. 前言 MySQL在2016年仍然保持强劲的数据 ...

  9. if else的错误用法!

    在学习C语言的时候,我们会了解和认识if  else 的用法, 并在程序里面使用它来作为判断条件! if(表达式)       //先定义一个条件,如果成立,则循环if里面的语句. { 语句 } el ...

  10. WebViewClient shouldOverrideUrlLoading 常见错误用法

    需求描述 在使用 WebView 的项目中,一个常见的需求是将页面内的链接跳转限制在 WebView 内,而不是使用外部浏览器打开,但 WebView 的默认行为是将链接点击事件作为 Intent 发 ...

随机推荐

  1. css笔记14:css文件之间可以相互引用

    css文件之间相互引用是通过@import指令完成的 格式: @import  url("被引用的css文件"); 顺便说一句,如果希望在html或者php文件中引用某个xxx.c ...

  2. vs2010 调试C++程序 快捷键

    命令名 快捷键 说明 调试.应用代码更改 Alt + F10 启动生成操作,利用它可以通过“编辑并继续”功能应用对正在调试的代码所作的更改. 调试.自动窗口 Ctrl + D,Ctrl + A 显示“ ...

  3. 使用NumberPicker定制自己喜欢的Date&TimePicker

    1.NumberPicker简介: NumberPicker是Android3.0之后引入的一个控件,主要功能是用于选择一组预定义好数字的控件. 该控件主要需要指导一个用于监听当前value变化的li ...

  4. 《MFC游戏开发》笔记二 建立工程、调整窗口

    本系列文章由七十一雾央编写,转载请注明出处.  http://blog.csdn.net/u011371356/article/details/9300383 作者:七十一雾央 新浪微博:http:/ ...

  5. SQL Server 格式化时间format

    select format(sysdatetime(),'yyyy-MM-dd HH:mm:ss'); SQL Server 2012才开始有这功能 这种样式很像oracle的to_char(sysd ...

  6. poj 1987 树的分治

    思路:1741的A1送 1. #include<iostream> #include<cstring> #include<algorithm> #include&l ...

  7. Linux 内核简介

    Linux内核简介 一.系统架构 (1). Linux系统架构 ##用户空间: 文件系统 C库 ##内核空间: 接口 内核 (2). Linux内核架构 二.Linux内核源代码 下载地址 www.k ...

  8. 初识Less(2015年05月23日)

    因为最近在研究Bootstrap,然后才了解到Less,听说Less很强大,又听说Bootstrap+Less会更搭,所以就决定也顺带了解下Less的相关知识. come  on...... 一.简介 ...

  9. 关闭“编辑窗体”后, 主窗体的DatagridView刷新数据的问题

    问题:在关闭一个窗体2后,要刷新窗体1内的datagridview的数据,直接窗体1.datagridview.datasource=dt 是没用的. 解决办法如下: 在主窗体里 创建编辑窗体时 加上 ...

  10. ios Swift 国外资源

    Swift国外资源汇总(No.1) 此类分享贴暂定每2天更新一次,主要目的是让大家能跟国外开发者们同步,共享知识和共同提高. 对于一些非常有价值的文章,大家有兴趣可以自行翻译(回贴跟我说一声,避免重复 ...