2016-07-30 53 views
1

我有一個帶有選擇輸入的表單,我希望在提交後保留選定的選項。在jsp困境中保留HTML選擇選項

到目前爲止,我已經發現了2個解決方案:

select1.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %> 
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 
<html> 
<head> 
    <title>Select 1</title> 
    <script> 
    function submitSelected1() { 
     document.form1.selected.value = document.form1.item.selectedIndex; 
     document.form1.submit(); 
    } 
    function retainSelected1(selected) { 
     if (selected) document.form1.item.selectedIndex = selected; 
    } 
    </script> 
</head> 
<body onload="retainSelected1(${param.selected})"> 
<form name="form1" action="${pageContext.request.contextPath}/controller" method="post"> 
    <select name="item" onchange="submitSelected1()"> 
    <option selected disabled>-- select item --</option> 
    <option value="1">Item1</option> 
    <option value="2">Item2</option> 
    <option value="3">Item3</option> 
    <option value="4">Item4</option> 
    </select> 
    <input type="hidden" name="selected" value=""> 
    <button type="submit">Submit</button> 
</form> 
</body> 
</html> 

select2.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %> 
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 
<html> 
<head> 
    <title>Select 2</title> 
    <script> 
    function retainSelected2(selected) { 
     document.querySelectorAll('[name=form2] option[value="' + selected + '"]')[0].defaultSelected = true; 
    } 
    </script> 
</head> 
<body onload="retainSelected2(${param.item})"> 
<form name="form2" action="${pageContext.request.contextPath}/controller" method="post"> 
    <select name="item"> 
    <option selected disabled>-- select item --</option> 
    <option value="1">Item1</option> 
    <option value="2">Item2</option> 
    <option value="3">Item3</option> 
    <option value="4">Item4</option> 
    </select> 
    <button type="submit">Submit</button> 
</form> 
</body> 
</html> 

的問題是在哪一個更好,爲什麼。如果有更好的解決方案來完成這個任務,我也很感興趣。

回答

1

使用sessionStorage留住你的價值觀&有一些狀態:

在提交:

  • 保存所選的選項值只提交之前。

    sessionStorage.setItem('LAST_SELECTED',document.querySelectorAll('[name=form1] option[selected]')[0].value);  
    

    ;

在頁面加載:

  • 獲取最後一次選擇的選項的值:

    var value=sessionStorage.getItem('LAST_SELECTED'); 
    

    _組選定的選項:

    document.querySelectorAll('[name=form1] option[value="'+value+'"]')[0].defaultSelected = true 
    

+0

在我的情況''選項[選定]'選擇器將始終給' - 選擇項目--'。它應該替換爲'option:check'。然後它工作。 – tarashypka

+1

你的答案幫了我很多。看來'sessionStorage'會將所有東西都保存在客戶端,因此它肯定比我的第一個解決方案更好(因爲我不需要在每個請求中發送'selected'參數)。 'querySelectorAll'通過我的第二個解決方案中的所有選項刪除循環。謝謝。 – tarashypka

+0

如果這是一個有用的答案,請將問題解決! –