1. 程式人生 > >struts2標籤s:select 只讀解決方案

struts2標籤s:select 只讀解決方案

      使用struts2的<s:select>標籤不具有disabled屬性,除非將theme設定為simple才可以使用disabled,那麼如果不使用simple的theme還有其他辦法使select下拉框只讀嗎?從網上找到了一個辦法,大致的思路就是

不讓下拉框獲得焦點,見下面的html程式碼:

 <span onmousemove="this.setCapture();" onmouseout="this.releaseCapture();" onfocus="this.blur();">
  
    <s:select key="DmsDocument.docZtSpec"   name="editEntity.docZtSpec"  list="#request['map'].docZtSpec" listKey="code" listValue="name" emptyOption="true"   />
    </span>

上面的<span>標籤控制了不讓select下拉框獲得焦點,試驗了一下還真管用,那麼<s:radio>大概也可以用這種方式控制只讀吧,也許是可以的.

       以上解決方案,見於各大搜索引擎結果,該解決方案並不完美!

      用滑鼠點選該select控制元件,確實無法選中也就無法改變,但若用鍵盤呢,當游標移到select控制元件上,擊向下箭頭鍵,其可選項就可以改變了!

       怎麼辦?

        針對帶輸入控制元件的介面,我們一般會以回車鍵代替TAB鍵,

//回車代替Tab鍵
function transTabKey(){
    if (window.event.keyCode == 13 && event.srcElement.type!='textarea' )//&& event.srcElement.type!='button' && event.srcElement.type!='submit' && event.srcElement.type!='reset' && event.srcElement.type!=''
        window.event.keyCode = 9;
}

      於是就有<body onkeydown="transTabKey();">

      同樣我們可乘此東風把<s:select>鍵盤事件加以遮蔽,也就是在其onkeydown事件把其他鍵轉為回車,由於回車後可順利進入下一個控制元件,從而實現用鍵盤選取亦不可能。

     參見:

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

<s:select key="DmsDocument.docZtSpec"   name="editEntity.docZtSpec"  list="#request['map'].docZtSpec" listKey="code" listValue="name" emptyOption="true" 

onkeydown="javascript:if (window.event.keyCode != 13) window.event.keyCode = 13;" >
                      </s:select>   

     </span>