真真心

导航

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,因此去网上查了一下。发现有以下解决方案:

 

posted on 2016-01-11 14:52  真真心  阅读(962)  评论(0编辑  收藏  举报