使用struts2的<s:select>标签不具有disabled属性,除非将theme设置为simple才可以使用disabled,那么如果不使用simple的theme还有其他办法使select下拉框只读吗?从网上找到了一个办法,大致的思路就是
不让下拉框获得焦点,见下面的html代码:
<span οnmοusemοve="this.setCapture();" οnmοuseοut="this.releaseCapture();" οnfοcus="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 οnkeydοwn="transTabKey();">
同样我们可乘此东风把<s:select>键盘事件加以屏蔽,也就是在其onkeydown事件把其他键转为回车,由于回车后可顺利进入下一个控件,从而实现用键盘选取亦不可能。
参见:
<span οnmοusemοve="this.setCapture();" οnmοuseοut="this.releaseCapture();" οnfοcus="this.blur();">
<s:select key="DmsDocument.docZtSpec" name="editEntity.docZtSpec" list="#request['map'].docZtSpec" listKey="code" listValue="name" emptyOption="true" οnkeydοwn="javascript:if (window.event.keyCode != 13) window.event.keyCode = 13;" >
</s:select>
</span>