• JS在页面限制checkbox最大复选数


    应该是挺简单的代码, 记录一下分享.


    首先最直接的想法就是使用循环, 用局部变量记录已选的checkbox, 达到最大值就将余下的checkbox都禁止选择, 例如以下:

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "">
    <html xmlns="">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
    <title>JS限制checkbox复选框多选</title>
    <script language="javascript" type="text/javascript">
    function onCheckBox(checkbox)
    {
    	var items = document.getElementsByName("item");
    	var maxChoices = 3;
    	var flag = 0;
    	
    	for(var i=0; i<items.length; i++)
    	{
    		if(items[i].checked)
    		{
    			flag ++;
    		}
    	}
    	if(flag >= maxChoices)
    	{
    		for(var k=0; k<items.length; k++)
    		{
    			if(!items[k].checked)
    			{
    				items[k].disabled = true;
    			}
    		}
    	}
    	else
    	{
    		for(var p=0; p<items.length; p++)
    		{
    			if(!items[p].checked)
    			{
    				items[p].disabled = false;
    			}
    		}
    	}
    }
    
    function onSubmitVote()
    {
    	var items = document.getElementsByName("item");
    	var choices = 0;
    	var maxChoices = 3;
    	
    	for(var j=0; j<items.length; j++)
    	{
    		if(items[j].checked)
    		{
    			choices ++;
    		}
    	}
    	if(choices == 0)
    	{
    		alert("请选择选项再提交");
    	}
    	else if(choices > maxChoices)
    	{
    		alert("选择选项不能超过 "+ maxChoices + "个");
    	}
    	else
    	{
    		alert("提交成功");
    	}
    }
    
    </script>
    </head>
    <body >
    JS限制checkbox复选框多选
    <br><br>
    
    
    <input type="checkbox" value="value1" name="item" onClick="onCheckBox(this);"/> 选项一 
    <br>
    <input type="checkbox" value="value2" name="item" onClick="onCheckBox(this);"/> 选项二 
    <br>
    <input type="checkbox" value="value3" name="item" onClick="onCheckBox(this);"/> 选项三 
    <br>
    <input type="checkbox" value="value4" name="item" onClick="onCheckBox(this);"/> 选项四 
    <br> 
    <input type="checkbox" value="value5" name="item" onClick="onCheckBox(this);"/> 选项五 
    <br><br>
    
    <input type="button" id="submit_vote" name="submit_vote" value="提交" onClick="onSubmitVote()" />
    
    </body>
    </html>


    执行例如以下:

    效果是没问题, 但通常第一想法都是比較粗糙的, 好的东西须要加以雕琢. 上面用的的是局部变量, 所以每次进入js的onCheckBox()都是新的变量, 还要循环几次, 但换成全局变量, 每次进入, flag的值都是继续上次操作的值, 那么能够降低循环的次数了. 针对该部分做改动, 例如以下:

    <script language="javascript" type="text/javascript">
    var maxChoices = 3;
    var flag = 0;
    
    function onCheckBox(checkbox)
    {
    	var items = document.getElementsByName("item");
    	//var maxChoices = 3;
    	//var flag = 0;
    	
    	if(checkbox.checked)
    	{
    		flag ++;
    	}
    	else
    	{
    		flag --;
    	}
    	
    	if(flag < maxChoices)
    	{
    		for(var i=0; i<items.length; i++)
    		{
    			if(!items[i].checked)
    			{
    				items[i].disabled = false;
    			}
    		}
    	}
    	else
    	{
    		for(var i=0; i<items.length; i++)
    		{
    			if(!items[i].checked)
    			{
    				items[i].disabled = true;
    			}
    		}
    	}
    	
    	
    }
    
    function onSubmitVote()
    {
    	var items = document.getElementsByName("item");
    	var choices = 0;
    	//var maxChoices = 3;
    	
    	for(var j=0; j<items.length; j++)
    	{
    		if(items[j].checked)
    		{
    			choices ++;
    		}
    	}
    	if(choices == 0)
    	{
    		alert("请选择选项再提交");
    	}
    	else if(choices > maxChoices)
    	{
    		alert("选择选项不能超过 "+ maxChoices + "个");
    	}
    	else
    	{
    		alert("提交成功");
    	}
    }
    
    </script>

    这样效果是一样的, 但循环就少一次.


  • 相关阅读:
    Win10怎么设置虚拟内存?
    树莓派 —— USB 摄像头简单测试 (拍照 & 视频)
    如何设置树莓派 VNC 的分辨率
    树莓派 VNC Viewer 远程桌面配置教程
    数据库开发——MySQL——数据的增删改查
    数据库开发——MySQL——foreign key
    数据库开发——MySQL——primary key
    一种关闭按钮
    oracle下 启动subversion命令 及 oracle相关服务启动备忘
    table内 获取同一行 其他列的value
  • 原文地址:https://www.cnblogs.com/gccbuaa/p/6930913.html
Copyright © 2020-2023  润新知