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: Float a div on another div, Ex: Text caption on picture

    <style type="text/css"> .figure { width: 316px; height: 205px; display: block; borde ...

  2. Objective-C ,ios,iphone开发基础:http网络编程

    - (IBAction)loadData:(id)sender { NSURL* url = [NSURL URLWithString:@"http://162.105.65.251:808 ...

  3. mac 下curl的使用

    curl用起来非常方便,但是老是记不住各个参数的含义,还是记录下来方便查询吧 这东西现在已经是苹果机上内置的命令行工具之一了,可见其魅力之一斑 1)二话不说,先从这里开始吧! curl http:// ...

  4. [改善Java代码]不要让类型默默转换

    建议23:不要让类型默默转换 public class Client { // 光速是30万公里/秒,常量 public static final int LIGHT_SPEED = 30 * 100 ...

  5. jQuery 显示加载更多

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  6. Jersey(1.19.1) - Life-cycle of Root Resource Classes

    By default the life-cycle of root resource classes is per-request, namely that a new instance of a r ...

  7. Jersey(1.19.1) - Security

    Security information is available by obtaining the SecurityContext using @Context, which is essentia ...

  8. C#中显/隐式实现接口及其访问方法

    原贴地址: http://www.cnblogs.com/dudu837/archive/2009/12/07/1618663.html 在实现接口的时候,VS提供了两个菜单,一个是"实现接 ...

  9. Servlet之初识

    doHeader 用于处理HEADER请求doGet 用于处理GET请求,也可以自动的支持HEADER请求doPost 用于处理POST请求 doPut 用于处理PUT请求 doDelete 用于处理 ...

  10. OpenMP多线程linux下的使用,简单化

    http://hi.baidu.com/diwulechao/item/bc6d865c411b813c32e0a932 http://www.cnblogs.com/yangyangcv/archi ...