我是JSTL的初学者,因为我最近才开始使用它来避免在我的JSP中使用scriplet,我想要求我帮忙解决一些问题。
我有一个select元素,我已经设法使用JSTL填充了一个arraylist。但是,每当选择下拉列表中的不同选项时,我还需要动态更改只读文本字段的值,并且放在文本字段中的值与选定选项在arraylist中的索引相同,并且&# 39;我遇到麻烦的地方。
<select id="department" onchange="managerfill()">
<c:forEach var="dept" items="${departments}">
<option value="${dept.deptname}"><c:out value="${dept.deptname}"/></option>
</c:forEach>
</select>
<input type="text" id="manager" readonly>
我尝试使用js函数来更改文本字段的值,但到目前为止,我还没有运气让它发挥作用。
function managerfill() {
var x = document.getElementById("department").selectedIndex;
document.getElementById("manager").value="${departments[x].manager}";
}
如果部门和经理字段都是下拉列表,那会更容易,但我们需要让经理成为一个文本字段,所以我有点不知所措,试图解决它。
答案 0 :(得分:2)
您无法在呈现的网页上使用jstl语言。 jstl仅限服务器端,不能在最终用户浏览器上使用。
您需要使用js来更改它。
你写的函数很好地期望jstl语法不能再被解释了。
function managerfill() {
var select = document.getElementById("department");
var x = select.selectedIndex;
document.getElementById("manager").value = select.options[x].text;
}
这样的事情应该有效。
但我认为您要打印的文本是服务器端,因此您可以在某些html / tag或隐藏选择中打印它并从中获取结果。
替换select.options[x].text
:
<select id="departments-manager" class="hidden">
<c:forEach var="dept" items="${departments}">
<option value="${dept.manager}"><c:out value="${dept.manager}"/></option>
</c:forEach>
</select>
function managerfill() {
var select = document.getElementById("department");
var selectManager = document.getElementById("departments-manager");
var x = select.selectedIndex;
document.getElementById("manager").value = selectManager.options[x].text;
}