返回首页
当前位置: 主页 > 开发手册 > JS >

select中实现readonly的方法

时间:2011-05-03 21:14来源:互联网 作者:秩名 点击:
select 没有readonly属性,使用desibled又无法传值,因此现在使用JS方法模拟实现。
  

select 没有readonly属性,使用desibled又无法传值,因此现在使用JS方法模拟实现。

简单说两种方式,实质是一样的,一种简介明了,一种稍显复杂

实质都是用:

onmousemove="this.setCapture();" onmouseout="this.releaseCapture();" onfocus="this.blur();"

这句代码来控制用户无法选择和更改该控件的值

方法一:

一、先说简单的(平时都用简单的,但是有大量select控件需要做readonly处理时用复杂的更简单)

 

  1. <select  onmousemove="this.setCapture();" onmouseout="this.releaseCapture();" onfocus="this.blur();"
  2.  
  3. <option selected >aaa</option> 
  4.  
  5. <option>bbb</option> 
  6.  
  7. </select>     

方法二:

二、贴一个复杂的,就是把变化放入js,来实现而已,多时候有用,另外只在脚本控制时候用

该方法转自CSDN博客,http://blog.csdn.net/lengyueqinghui/archive/2009/08/18/4457660.aspx
 

  1. function 
  2.  
  3. // set all input/select/textarea readonly   
  4.  
  5. function allReadonly(){   
  6.  
  7.     // input readonly   
  8.  
  9.     var inputEle = document.getElementsByTagName("input");   
  10.  
  11.     for(var i=0; i<inputEle.length; i++){   
  12.  
  13.         inputEle[i].setAttribute("readonly","true",0);   
  14.  
  15.         inputEle[i].onclick = function setClickFalse(){return false;}   
  16.  
  17.         inputEle[i].onfocus = function setFocusFalse(){return false;}   
  18.  
  19.         inputEle[i].onblur = function setBlurFalse(){return false;}   
  20.  
  21.     }   
  22.  
  23.     // select readonly   
  24.  
  25.     var selectEle = document.getElementsByTagName("select");   
  26.  
  27.     for(var i=0; i<selectEle.length; i++){   
  28.  
  29.         setReadOnly(selectEle[i]);   
  30.  
  31.     }   
  32.  
  33.     // textarea readonly   
  34.  
  35.     var textareaEle = document.getElementsByTagName("textarea");   
  36.  
  37.     for(var i=0; i<textareaEle.length; i++){   
  38.  
  39.         textareaEle[i].setAttribute("readonly","true",0);   
  40.  
  41.     }   
  42.  
  43. }   
  44.  
  45.   
  46.  
  47. // select readonly   
  48.  
  49. function setReadOnly(obj){   
  50.  
  51.     obj.onmouseover = function(){   
  52.  
  53.         obj.setCapture();   
  54.  
  55.     }   
  56.  
  57.     obj.onmouseout = function(){   
  58.  
  59.         obj.releaseCapture();   
  60.  
  61.     }   
  62.  
  63.     obj.onfocus = function(){   
  64.  
  65.         obj.blur();   
  66.  
  67.     }   
  68.  
  69.     obj.onbeforeactivate = function(){   
  70.  
  71.         return false;   
  72.  
  73.     }    
  74.  
  75. }   
  76.  
  77.   
  78.  
  79. // select readonly rollback   
  80.  
  81. function rollBack(obj){   
  82.  
  83.     obj.onmouseover = function(){   
  84.  
  85.     }   
  86.  
  87.     obj.onmouseout = function(){   
  88.  
  89.     }   
  90.  
  91.     obj.onfocus = function(){   
  92.  
  93.     }   
  94.  
  95.     obj.onbeforeactivate = function(){   
  96.  
  97.     }    
  98.  
  99. }  

以上来自http://lava83.blog.163.com/blog/static/31759993201012533915991/

有用,有效过。网上另有一种方法见下面:

今天在做一个页面的时候,遇到一个问题,添加和更新使 用同一个页面,当添加的时候,select可以正常使用,如果是更新,那么要求select的值是指定的,并且不可使用,保存时,该控件的值可以正常保 存,大家知道select控件没有readonly属性,但是我们还需要用到该功能,该如何实现呢?
         上网搜索了一下,发现一种不错的方法,贡献给大家,代码如下:
    <select name="projInveSour.phaseType" <c:if test='${method eq "update"}'> onbeforeactivate="return false" onfocus="this.blur()" onmouseover="this.setCapture()" onmouseout="this.releaseCapture()" </c:if>>
        <option value="">全部</option>
        <option value="立项" <c:if test='${projInveSourForm.projInveSour.phaseType eq "立项"}'>selected</c:if>>立项</option>
        <option value="初设" <c:if test='${projInveSourForm.projInveSour.phaseType eq "初设"}'>selected</c:if>>初设</option>
       </select>
红色部分为关键代码,大家参考一下,呵呵

来自:http://www.blogjava.net/sword/articles/278054.html

顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
最新评论 查看所有评论
发表评论 查看所有评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 密码: 验证码:
推荐内容