用js操作struts2标签出现的问题
使用struts2标签会带来很多便利,但在用js控制(定位及获取属性值等)struts2标签时要特别注意,因为struts2标签在页面最终显示时,实际上还是转换为html标签来显示,js(包括jquery和prototype等js框架)也是对基本的html标签来定位及获取其属性值;若用js操作html标签的方式来直接操作struts标签,可能会遇到一些“很怪异”(从代码逻辑上找不到错误)的问题,让人很郁闷,如何解决这种问题?
最简单的方法是:用html标签代替struts2标签。但这样便无法享受struts2标签所带来的便利,而且会在页面中掺杂很多jsp代码(<%....%>)。我比较喜欢另一种方法:页面显示后,查看其经过浏览器解析后的源码(浏览器自带有查看页面源码的功能),其实就是strut2标签解析为对应的html标签,再用js操作就比较简单了,不用在此赘述。建议用fireFox浏览器调试web页面,可以用其fireBug功能调试js。
下面看一个例子:
Html代码为:
<div>
录入选项:<s:radio id=”opt” name="opt" list="#{'theTeach':'人员理论教学','cliTeach':'人员临床教学','teaArticle':'教学管理文章','giftCourse':'精品课程','giftBook':'精品教材','excePaper':'指导优秀论文','eduCheck':'教育年度考核子集'}" value="'theTeach'" listKey="key" listValue="value">
</s:radio>
</div>
Js代码为:
var s=document.getElementById(“opt”).value;
或者jquery代码为:
var s=$(“#opt”).attr(“value”);
表面上看起来都没有错误,但实际上s却得不到值,为什么呢?
查看浏览器解析后的源码如下:
<div>
录入选项:<input type="radio" name="opt" id="opttheTeach" checked="checked" value="theTeach"/><label for="opttheTeach">人员理论教学</label>
<input type="radio" name="opt" id="optcliTeach" value="cliTeach"/><label for="optcliTeach">人员临床教学</label>
<input type="radio" name="opt" id="optteaArticle" value="teaArticle"/><label for="optteaArticle">教学管理文章</label>
<input type="radio" name="opt" id="optgiftCourse" value="giftCourse"/><label for="optgiftCourse">精品课程</label>
<input type="radio" name="opt" id="optgiftBook" value="giftBook"/><label for="optgiftBook">精品教材</label>
<input type="radio" name="opt" id="optexcePaper" value="excePaper"/><label for="optexcePaper">指导优秀论文</label>
<input type="radio" name="opt" id="opteduCheck" value="eduCheck"/><label for="opteduCheck">教育年度考核子集</label>
</div>
由此可看出上述js代码是不可能获取值的。可改为:
var s=$(“:radio:checked”).attr(“value”);
另外,要特别注意上述<s:radio>标签中的属性value=“’theTeach’”设置默认选中项,要求value的值必须与list属性中的key值完全相同。