1

我有一个下拉菜单,其中包含一些文档名称。现在,当一个人选择一个文档时,它会调用 onDocumentChange() 方法。

为了填充下拉菜单,我收到一个名为 result 的对象,它是来自服务器的 doc 对象列表。

<select id="documentSelect" onChange="onDocumentChange()">
<c:forEach items="${results}" var="result">
    <option id="${result.getDocDisplayURL()}"><c:out value="${result.getDocFn()}"/></option>
</c:forEach>
</select>

到目前为止,它是紧张的。

现在这个 doc 对象有一些其他属性,称为日期和时间。现在,当用户从下拉菜单中单击任何项​​目时,我想将该特定项目的时间和日期属性发送到 onDocumentChange() 方法。我怎样才能做到这一点。

我猜是这样的

<select id="documentSelect" onChange="**onDocumentChange(result.date, result.time)**">
<c:forEach items="${results}" var="result">
<option id="${result.getDoc()}"><c:out value="${result.getText()}"/></option>
</c:forEach>
</select>

谢谢

4

1 回答 1

3

您似乎认为 JavaScript 与 Java/JSP 一起运行。这是不真实的。Java/JSP 生成 HTML,而 JavaScript 是该 HTML 的一部分,并且仅适用于 HTML DOM 树。您需要确保您的 Java/JSP 代码生成的 HTML 代码准确包含 JavaScript 需要访问的信息。您可以让 Java/JSP 将这些变量打印为 HTML 元素的属性,就像<option>您的情况一样。您可以data-*在 HTML 中使用自定义属性来附加自定义属性。

<option value="${result.doc}" data-date="${result.date}" data-time="${result.time}">

可以通过<option>如下方式获取 JavaScript 中当前选中的元素

var option = select.options[select.selectedIndex];
var doc = option.value;
var date = option.getAttribute("data-date");
var time = option.getAttribute("data-time");
// ...

您只需要更改onchange处理程序以传递 HTML<select>元素本身

onchange="onDocumentChange(this)"

function onDocumentChange(select) {
    // ...
}

顺便说一句,为什么要为日期和时间使用单独的属性而不是单个java.util.Date属性?模型设计有问题。

于 2012-06-27T15:59:58.563 回答