posts - 162,  comments - 553,  trackbacks - 0
 <input type="button" name="" value="不计算长度" onclick="a()">
 
<input type="button" name="" value="全选" onclick="b()">
 
<input type="button" value="缓存"  onclick="c()">
  
<input type="checkbox" name="test[]" value="0"> 测试测试<br>
   
<script language="JavaScript">
 
<!--
    
var ca = new Array();
    
function a()
    
{
        
var m = document.getElementsByName('test[]');
        
for ( var i=0; i< m.length ; i++ )
        
{
            m[i].checked 
== true
                
? m[i].checked = false
                : m[i].checked 
= true;
        }

    }


    
function b()
    
{
        
var m = document.getElementsByName('test[]');
        
var l = m.length;
        
for ( var i=0; i< l; i++)
        
{
            m[i].checked 
== true 
                
? m[i].checked = false
                : m[i].checked 
= true;
        }

    }


    
function c()
    
{
        
if (ca.length == 0)
        
{
            ca 
= cache();
        }

        cl 
= ca.length;
        
for ( var i=0; i< cl; i++)
        
{
            ca[i].checked 
== true 
                
? ca[i].checked = false
                : ca[i].checked 
= true;
        }

    }


    
function cache()
    
{
        
var m = document.getElementsByName('test[]');
        
var cache = new Array();
        
var l = m.length;
        
for ( var i=0; i< l; i++)
        
{
            cache[i] 
= m[i];
        }

        
return cache;
    }


 
//-->
 
</script>
黑黑,至于那个input type="checkbox"的,你们就尽量复制吧,尽量不要超过1W,否则。。别怪我没有提醒你,当然了,也不需要把浏览器关掉,跑到外面抽根烟再回来就行了。

所以,我们要切实的记住,反正数组有长度的,坚决不能放在循环里面,而是先将这个长度取出来当成变量。PHP里也一样,循环数组的时候,先count数组的长度比较好。
当然了,我第三个采用了缓存,速度也是非常快的,比长度取好后再进行计算更快,因为连一次都不用取了(当然,除了第一次),全部扔给客户端了。

上面的例子还是比较方便的,因为,checkbox的 name值都一样,如果不一样怎么办???
只能这样
 <script language="JavaScript">
 
<!--
    
function check()
    
{
        
var inputs = document.getElementsByTagName('input');
        
var inputsLen = inputs.length;
        
for (var i = 0; i < inputsLen ; i++ )
        
{
            
if (inputs[i].type.toLowerCase() == 'checkbox')
            
{
                inputs[i].checked 
== true 
                    
? inputs[i].checked = false
                    : inputs[i].checked 
= true;
            }

        }

    }

 
//-->
 
</script>
缓存方法同上,这里就不多讨论了


请求加精……唉。没地方加精。
posted on 2007-10-17 17:44 简单人生 阅读(5075) 评论(11)  编辑 收藏 引用 所属分类: Loving PHP

FeedBack:
# re: JS全选checkBox最佳方案。原创哦
2007-10-17 17:56 | 991
顶!呵呵。  回复  更多评论
  
# re: JS全选checkBox最佳方案。原创哦
2007-10-17 19:20 | 991
var l = m.length; //牛X语句

以前没有刻意去验证这两种写法有多大差距。
$num = getCount();
for($i=0;$i<$num;$i++){} 与
for($i=0;$i<getCount();$i++){}的区别

在这个例子很好体现。

  回复  更多评论
  
# re: JS全选checkBox最佳方案。原创哦
2007-10-17 19:25 | 991
一不小心多复制了6w多,

b()也就2秒多,
c()一秒多。

呵呵。


加精~!  回复  更多评论
  
# re: JS全选checkBox最佳方案。原创哦
2007-10-17 19:43 | 简单人生
如果名字不一样呢?如果NAME名字不一样,你只能用TagName的时候,你就会知道这个差距是多大了……  回复  更多评论
  
# re: JS全选checkBox最佳方案。原创哦
2007-10-17 21:38 | 简单人生
又有朋友和我讲……完全可以
m[i].checked = !m[i].checked;  回复  更多评论
  
# re: JS全选checkBox最佳方案。原创哦
2007-10-23 10:27 | 十三郎
不知道怎么说,连最基本的功能实现都不是太好。
假如你选择一个,再点击全选,全选了吗?  回复  更多评论
  
# re: JS全选checkBox最佳方案。原创哦
2007-10-29 13:11 | 简单人生
@十三郎
那就是复选了。因为我没有判断它是否现在选中,我这个只是为了说明一下,如果同时选中这么多checkbox框的耗时情况。然后说明一下,写代码稍有一点规范性。本身我的代码中就是偷懒写法。。黑黑  回复  更多评论
  
# re: JS全选checkBox最佳方案。原创哦
2007-12-17 07:03 | 高原
真是学到东西了.不错,以后写程序要注意这方面的问题.  回复  更多评论
  
# re: JS全选checkBox最佳方案。原创哦[未登录]
2009-04-09 11:56 | 小可
学习了  回复  更多评论
  
# re: JS全选checkBox最佳方案。原创哦[未登录]
2009-09-02 15:35 | 过客
感谢感谢,真是受益  回复  更多评论
  
# re: JS全选checkBox最佳方案。原创哦
2009-09-23 17:43 | xxx
我又要说LZ 了, 给你说个比较好的 array[i].checked=obj.checked;  回复  更多评论
  

每天10分钟,轻松学英语
专题:iPad  jQuery  Chrome OS
博客园首页  IT新闻  程序员微博  招聘频道  学英语
标题  
姓名  
主页
验证码 *
内容(提交失败后,可以通过“恢复上次提交”恢复刚刚提交的内容)
 
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
[使用Ctrl+Enter键可以直接提交]
Windows 7专题

相关链接:
<2009年4月>
2930311234
567891011
12131415161718
19202122232425
262728293012
3456789

常用链接

留言簿(16)

随笔分类(73)

文章分类(2)

相册

友逹們

搜索

  •  

最新评论

评论排行榜