【问题标题】:Java Get ALL elements from a multiselect BoxJava从多选框中获取所有元素
【发布时间】:2012-03-29 04:18:44
【问题描述】:

我有一个多选框,我正在做一些 javascript 来对框中元素的顺序进行排序。我想在排序回 Java 后提交 whole 数组,而不仅仅是选择项。我怎样才能做到这一点?

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>&nbsp;&nbsp;&nbsp;
                <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>

表格:

 private String[] fieldNames;
public String[] getFieldNames() { return this.fieldNames; }
            public void setFieldNames(String[] val) { this.fieldNames = val; }

【问题讨论】:

标签: java javascript jsp


【解决方案1】:

由于表单只提交选定的值,因此您需要更多的 JS 和另一个表单字段。

引入一个隐藏的表单字段来保存您关心的值:

<input type="hidden" name="fieldNamesOrder" id="fieldNamesOrder"/>

每次点击上移/下移后:

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秒!!!虽然,你的回答比我的详细多了!!! +1 :)
  • 从技术上讲,我需要它们...我将它们汇总在一个列表中并在表上执行 UPDATE 语句并更新字段的顺序
  • 正确,因此隐藏字段(即 Request["fieldNamesOrder"] 或您的框架访问发布的数据)按顺序包含每个选项。
  • 他可以为他的表单注册和 onsbumit 事件处理程序并执行此操作,而不是在每次单击鼠标时都这样做......可以节省一些客户端资源
  • 我这样做了......似乎更干净$(document).ready(function() { $("#submit").click(function() { $("#list").each(function(){ $("#list option").attr("selected","selected"); }); $("#detColumnSortorder").submit; }) ; });
【解决方案2】:

您需要在 HTML 表单中创建一个隐藏的文本字段来存储每个选项的值...或者您需要在提交表单之前以编程方式选择所有选项。

【讨论】:

    猜你喜欢
    • 2011-02-06
    • 2012-09-09
    • 2021-05-29
    • 2012-02-14
    • 1970-01-01
    • 2016-07-06
    • 2016-01-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多