我有一个多选框,我正在做一些javascript来排序框中元素的顺序。我想在排序回Java之后提交整个数组,而不仅仅是选择项。我怎样才能做到这一点?
JSP:
<script type="text/javascript">
$(document).ready(function(){
$("#mup")[0].attachEvent("onclick", moveUpItem);
$("#mdown")[0].attachEvent("onclick", moveDownItem);
});
function moveUpItem(){
$('#list option:selected').each(function(){
$(this).insertBefore($(this).prev());
});
}
function moveDownItem(){
$('#list option:selected').each(function(){
$(this).insertAfter($(this).next());
});
}
</script>
<table width="100%">
<tr>
<td width="50%" align="center">
<h1>DET Column Maintenance</h1>
</td>
</tr>
</table>
<form action="process.det_column_order" method="post" name="detColumnSortorder" >
<table class="data_table">
<tr align="center">
<td>
<select id="list" name="fieldNames" size="35" multiple="multiple" style="width: 250px;">
<c:forEach var="field" items="${detFields}">
<option value="${field.fieldName}">${field.displayName}</option>
</c:forEach>
</select>
</td>
<tr>
<td style="text-align: center;">
<button id="mup">Move Up</button>
<button id="mdown">Move Down</button>
</td>
</tr>
<tr>
<td style="text-align: center;">
<input name="action" type="submit" value="Submit"/>
</td>
</tr>
</table>
</form>
FORM:
private String[] fieldNames;
public String[] getFieldNames() { return this.fieldNames; }
public void setFieldNames(String[] val) { this.fieldNames = val; }
答案 0 :(得分:4)
由于表单只提交选定的值,因此您需要更多的JS和另一个表单字段。
引入一个隐藏的表单字段,用于保存您关注的值:
<input type="hidden" name="fieldNamesOrder" id="fieldNamesOrder"/>
每次点击Move Up / Move Down:
var order = [], sel = document.getElementById("list");
for(var i = 0, len = sel.options.length; i < len; i++) {
order.push(sel.options(i).value);
}
document.getElementById("fieldNamesOrder").value = order.join(",");
然后,在服务器端,您可以从该已发布字段中读取已排序的字段名称。
答案 1 :(得分:0)
您需要在HTML表单中创建一个隐藏文本字段,用于存储每个选项的值...或者您需要在提交表单之前以编程方式选择所有选项。