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"
</s:select>
</span>