如何使用JS保留下拉列表的值
How to retain a value of dropdown using JS?
我有三个下拉菜单和一个提交按钮。现在,我试图在用户单击输入提交后保留每个下拉框的值。但我有Jquery不工作。当用户单击下拉菜单时,我使用PHP显示下拉菜单的输出。
注:当用户点击输入提交时页面刷新。
如何解决这个问题?见柱塞
JS:
$(document).ready(function(){
$('#dropdown').change(function(){
var option = $(this).find('option:selected').val();
$('#dropdown').val(option);
});
});
使用all选项使用本地存储;
$("#dropdown").change(function(){
var html=$("#dropdown").html();
localStorage.setItem("myapp-selectval",html);
localStorage.setItem("myapp-selectvalselected",$("#dropdown").val()); //to retain selected value
})
现在开始加载文件;
window.onload=function()
{
if(localStorage.getItem("myapp-selectval")!="" && localStorage.getItem("myapp-selectval")!=undefined)
{
$("#dropdown").html(localStorage.getItem("myapp-selectval"));
$("#dropdown").val(localStorage.getItem("myapp-selectvalselected")); //to get previously selected value
}
}
正如我在评论中所说的,这不是一个好的解决方案。
您可以通过使用select
元素中的model
属性轻松获得这些值。
首先添加如下的onclick函数
<input type="submit" name="submit" value="Submit" onclick="getValues()"/>
然后获得提交按钮的值(完整代码) Plunkr
我看了一下你的代码,你的选择框渲染的方式是设置我们必须显式地调用updateSelect()
函数的选项工作得很好。这个函数使你的选择框是"动态的"。
var first = localStorage.getItem("firstDropDown");
var second = localStorage.getItem("secondDropDown");
var third = localStorage.getItem("thirdDropDown");
if(first !== null && second !== null && third !== null) {
setValues(); //this should come after getting the values above
}
function getValues() {
var first = document.getElementsByTagName("SELECT")[0].getAttribute("model");
var second = document.getElementsByTagName("SELECT")[1].getAttribute("model");
var third = document.getElementsByTagName("SELECT")[2].getAttribute("model");
localStorage.setItem("firstDropDown", first);
localStorage.setItem("secondDropDown", second);
localStorage.setItem("thirdDropDown", third);
}
//on load when this function is called globally, the values from the localStorage will be set to the dropdown values.
function setValues() {
//for first dropdown
document.getElementsByTagName("SELECT")[0].setAttribute("model", first);
document.getElementsByTagName("SELECT")[0].value = first;
updateSelect(document.getElementsByTagName("SELECT")[0]);
//for second dropdown
document.getElementsByTagName("SELECT")[1].setAttribute("model", second);
document.getElementsByTagName("SELECT")[1].value = second;
updateSelect(document.getElementsByTagName("SELECT")[1]);
//for third dropdown
document.getElementsByTagName("SELECT")[2].setAttribute("model", third);
document.getElementsByTagName("SELECT")[2].value = third;
updateSelect(document.getElementsByTagName("SELECT")[1]);
}
要保留该值,您别无选择,只能使用window.localStorage
,如下-
localStorage.setItem("firstDropDown", first);
localStorage.setItem("secondDropDown", second);
localStorage.setItem("thirdDropDown", third);
然后获取值
var first = localStorage.getItem("firstDropDown");
var second = localStorage.getItem("secondDropDown");
var third = localStorage.getItem("thirdDropDown");
如果用户要刷新页面,最好的办法是让服务器在加载新页面时发送用户刚刚提交的值。
如果由于某些原因无法实现,您可以使用localStorage:
$(document).ready(function(){
var prevVal = localStorage.getItem('selectValue');
prevVal && $('#dropdown').val(prevVal);
$('#dropdown').change(function(){
var option = $(this).val();
localStorage.setItem('selectValue', option);
});
});
请记住,并不是所有的浏览器都支持这个API。
EDIT:如果不需要浏览器刷新,可以使用Ajax:
// ...
$('#myForm').submit(function (event) {
event.preventDefault();
var option = $('#dropdown').val();
var fd = new FormData();
fd.append('dropdown', option);
$.ajax('/path/to/form/target/', {
method: 'POST',
formData: fd
});
// ...
});
//...
虽然我认为OP的问题要求JS解决方案,但我确实想把其他东西带到表中,因为我也在寻找解决同样的问题。然而,我最终以一种我认为令人满意的方式解决了这个问题。
在我的案例中,我使用Flask作为后端,但我相信解决方案至少应该与其他用例相似。
在下拉菜单所在的HTML中,我从后端传递了一个变量,该变量最初被设置为我选择的一些默认值。我们将这个变量命名为default_var_set_in_backend。这将最终被输入到HTML中,看起来如下所示:
<select name="some_name_you_want" onchange="this.form.submit()">
<option selected="selected">{{ default_var_set_in_backend }}</option>
一旦用户对下拉值进行了更改(在我的例子中是一个GET请求),我就更新变量default_var_set_in_backend,使其等于这个新选择。现在,一旦页面刷新,HTML将反映用户所做的最新选择。
- 如何使用jQuery选择下拉列表的值
- 将jsp文件下拉列表中的选定项分配给一个java变量(比如String selection)
- Javascript按钮下拉列表
- jQuery表单添加不适用于下拉列表
- 用每小时的差值填充数组/列表-从下拉列表中给定两个时间值
- 禁用jQuery中的下拉列表
- 如何在按钮中显示下拉列表中选定的元素
- 如何在从多选下拉列表中选择选项值时动态生成文本框
- 保留动态创建的下拉列表's在事件窗口.history.back()上选择的值-JavaScript
- 更改URL并保留“更改”事件下拉列表中的值
- 保留下拉列表的表单值
- 使用 javascript 将项目添加到下拉列表中并保留在回发中
- 在城市下拉列表中保留值(第4部分)
- 剑道UI输入焦点-在选择和Ajax调用之后,下拉列表保留焦点
- 如何使用默认值填充文本字段或将其保留为空,所有这些都取决于下拉列表中的选择
- 返回和保留选择的下拉列表函数
- 如何使用JS保留下拉列表的值
- 保留ASP的选定值.. NET下拉列表由JavaScript重新构建
- 页面刷新后保留下拉列表的选定值
- 如何在回发后保留下拉列表数据