1

いくつかのドキュメント名でいっぱいのドロップダウンメニューがあります。ドキュメントを選択すると、onDocumentChange() メソッドが呼び出されます。

ドロップダウン メニューを埋めるために、サーバーからの doc オブジェクトのリストである result というオブジェクトを受け取ります。

<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 コードが、JavaScript がアクセスする必要がある情報を正確に含む HTML コードを生成することを確認する必要があります。あなたの場合のように、Java/JSP にこれらの変数を HTML 要素の属性として出力させることができ<option>ます。HTML でカスタム属性を使用して、カスタムdata-*属性を追加できます。

<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");
// ...

onchangeHTML<select>要素自体を渡すようにハンドラーを変更するだけです

onchange="onDocumentChange(this)"

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

ところで、なぜ単一のjava.util.Dateプロパティではなく、日付と時刻に別々のプロパティを使用しているのですか? モデルの設計に問題があります。

于 2012-06-27T15:59:58.563 に答える