zoukankan      html  css  js  c++  java
  • 【jQuery学习】用JavaScript写一个输出多选框的个数报错:Cannot set property 'onclick' of null"

    说明:代码段来源于:《锋利的jQuery》

    根据代码段我补充的代码如下:

    <!DOCTYPE html>
    <html>
    	<head>
    		<meta charset="UTF-8">
    		<title></title>
    		<script type="text/javascript">
    			var btn=document.getElementById("btn");
    			btn.onclick=function(){
    				var arrays=new Array();
    				var items=document.getElementsByName("check");
    				for(i=0;i<items.length;i++){
    					if(items[i].checked){
    						arrays.push(items[i].value);
    					}
    				}
    				alert("选中的个数为"+arrays.length);
    			}
    	
    		</script>
    	</head>
    	<body>
    		<input type="checkbox" name="check"  value="1" checked="checked"/>
    		<input type="checkbox" name="check"  value="2" />
    		<input type="checkbox" name="check"  value="3" checked="checked"/>
    		<input type="button"  value="你选中的个数" id="btn" />
    	</body>
    </html> 
      
    

     结果报错:

    后来找到问题原因是因为:html文档是按顺序从上到下执行的,执行JavaScript时,还没加载到body里面的内容,所以会报错

    如果希望内容不报错,可以在JavaScript里面对id是否存在进行判断:即存在id的时候执行代码段

    <!DOCTYPE html>
    <html>
    	<head>
    		<meta charset="UTF-8">
    		<title></title>
    		<script type="text/javascript">
    			
    			var btn=document.getElementById("btn");
    			if(document.getElementById("btn")){
    			btn.onclick=function(){
    				var arrays=new Array();
    				var items=document.getElementsByName("check");
    				for(i=0;i<items.length;i++){
    					if(items[i].checked){
    						arrays.push(items[i].value);
    					}
    				}
    				alert("选中的个数为"+arrays.length);
    			}
    		}
    	
    		</script>
    	</head>
    	<body>
    		<input type="checkbox" name="check"  value="1" checked="checked"/>
    		<input type="checkbox" name="check"  value="2" />
    		<input type="checkbox" name="check"  value="3" checked="checked"/>
    		<input type="button"  value="你选中的个数" id="btn" />
    		
    	</body>
    </html> 
    

    但是,这样没有解决根本问题。将JavaScript代码调整到body内容后面就可以正常显示了

    <!DOCTYPE html>
    <html>
    	<head>
    		<meta charset="UTF-8">
    		<title></title>
    		
    	</head>
    	<body>
    		<input type="checkbox" name="check"  value="1" checked="checked"/>
    		<input type="checkbox" name="check"  value="2" />
    		<input type="checkbox" name="check"  value="3" checked="checked"/>
    		<input type="button"  value="你选中的个数" id="btn" />
    		<script type="text/javascript">
    			var btn=document.getElementById("btn");
    			btn.onclick=function(){
    				var arrays=new Array();
    				var items=document.getElementsByName("check");
    				for(i=0;i<items.length;i++){
    					if(items[i].checked){
    						arrays.push(items[i].value);
    					}
    				}
    				alert("选中的个数为"+arrays.length);
    			}
    	
    		</script>
    	</body>
    </html> 
      
    
  • 相关阅读:
    bzoj 2618: [Cqoi2006]凸多边形
    BZOJ 4556 [Tjoi2016&Heoi2016]字符串
    BZOJ 4850 [Jsoi2016]灯塔
    BZOJ 2956: 模积和
    PHP 正则表达式
    Linux Centos6.5安装redis3.0 和phpredis
    linux 删除过期文件
    THINKPHP报错 _STORAGE_WRITE_ERROR
    THINKPHP 部署nginx上URL 构造错误
    Linux 修改mysql密码
  • 原文地址:https://www.cnblogs.com/xphdbky/p/7987330.html
Copyright © 2011-2022 走看看