HTML中的select只读
因为Select下拉框只支持disabled属性,不支持readOnly属性,而在提交时,disabled的控件,又是不提交值的。现提供以下几种解决方案: 1、在html中使用以下代码,在select外层加1个span,通过js控制。这种设置的不足之处是IE浏览器兼容,fireFox及其他不兼容.. <span onmousemove="this.setCapture();"onmouseout="this.releaseCapture();" onfocus="this.blur();"> <select id="select1"> <option value="0">0</option> <option value="1">1</option> </select> </span> 2、使用js文件,这种方法的不足之处和第一种一样。 <select name="select"> <option>aaa</option> </select> <script type="text/javascript"> SetReadOnly(document.getElementById("select")); function SetReadOnly(obj){ if(obj){ obj.onbeforeactivate = function(){return false;}; obj.onfocus = function(){obj.blur();}; obj.onmouseover = function(){obj.setCapture();}; obj.onmouseout = function(){obj.releaseCapture();}; } } </script> 3、使用jquery方式解决。 $(function(){ $("select").attr("disabled", "disabled"); //如果和jquery1.6以上版本,可以使用以下语句: $("select").prop("disabled", true);}); 4、先将select的属性设置为 disabled="disabled" 然后在提交表单的时候使用disabled置为空。 Microsoft IE 5.5、IE 6、IE7、IE 10、Mozilla Firefox、Apple Safari 和 Opera 等浏览器对 HTML select 元素的 disabled 属性支持都很不错。而 IE 8、IE 9 和 Chrome 都有 bug,不能很好支持。不知道有没有办法在 HTML 源代码补救这一 bug。 补救办法: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html;charset=utf-8" /> <link href="Main.css" type="text/css" rel="stylesheet" /> <title>Test</title> </head> <body> <div> <select size="5" disabled="disabled"> <option value="C1">Black</option> <option value="C2">DarkCyan</option> <option value="C3" selected="selected" class="selected">DarkRed</option> <option value="C4">DarkMagenta</option> </select> <select size="5"> <option value="C1">Black</option> <option value="C2">DarkCyan</option> <option value="C3" selected="selected">DarkRed</option> <option value="C4">DarkMagenta</option> </select> <input type="text" /> </div> </body> </html> 其中 Main.css 如下所示: option.selected { color: White; background-color: Cyan; } 其他改变样式,使用CSS改变文字颜色 用 CSS 定义文字颜色如下代码所示: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html;charset=utf-8" /> <style type="text/css"> select { color:red } </style> <title>Test</title> </head> <body> <div> <select size="5" disabled="disabled"> <option value="C1">Black</option> <option value="C2">DarkCyan</option> <option value="C3" selected="selected">DarkRed</option> <option value="C4">DarkMagenta</option> </select> <select size="5"> <option value="C1">Black</option> <option value="C2">DarkCyan</option> <option value="C3" selected="selected">DarkRed</option> <option value="C4">DarkMagenta</option> </select> <input type="text" /> </div> </body> </html> 5、使用隐藏域,在select下面设置隐藏域,显示的时候disabled,提交的时候提交隐藏域中的值。 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <body> <select id="selList" onchange="setVal()"> <option value="1" >1</option> <option value="2" selected="selected">2</option> </select> <input id="hdSelList" type="text" /> <script type="text/javascript"> //本demo是为了清晰地表达, 你在select中加入 disabled="disabled", //将input中的type改为hidden即为你要的效果了. //提交时, 你不要取selList的值, 取hdSelList的值就好了. setVal(); //1.在初始加载时就将两者的值设置为一致; //2. 为了防止代码以后会有改动---有时不需要disabled, 故有上面的onchange="setVal()" function setVal() { document.getElementById('hdSelList').value = document.getElementById('selList').value; } </script> </body> </html> 还有下面的一种情况,页面数据太多,处理时间较长 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <script src="../ec/jquery/jquery-1.3.2.min.js" type="text/javascript"></script> <script type="text/javascript" > function commit() { $DisSelects = $("select[disabled='disabled']");//获取所有被禁用的select $DisSelects.attr("disabled", false); //处理之前, 全部打开 $("#form1").submit(); //提交 $DisSelects.attr("disabled", true); //处理完成, 全部禁用 } </script> </head> <body> <form id="form1" action="HTMLPage.htm"> <input type="button" value="submit" onclick="commit()" /> <select id="Select1" disabled="disabled" > <option value="0" >0</option> <option value="1" selected="selected">1</option> </select> <select id="Select2" disabled="disabled" > <option value="1" >1</option> <option value="2" selected="selected">2</option> </select> <select id="Select3" disabled="disabled" > <option value="2" >2</option> <option value="3" selected="selected">3</option> </select> <select id="Select4" disabled="disabled" > <option value="3" >3</option> <option value="4" selected="selected">4</option> </select> </form> </body> </html>
今天在网上看到select的只读问题,第一反应是readonly,后来发现select 没有readonly,因此去网上查了一下。发现有以下解决方案: