[英]keep dropdown selected after refresh
我嘗試通過更改值觸發重新加載后保留選定的項目,
但我在控制台上收到此錯誤“ TypeError:o.nodeName未定義[了解更多]”
我的選擇:
<select onchange="showMov(this.value);" id="mov_type" name="mov_type" class="form-control" type="text" />
<option value="Selected">Choose Type</option>
<option value="rusak">Rusak</option>
<option value="dipinjam">Dipinjam</option>
<option value="ditarik">Ditarik</option>
</select>
我的js
function showMov(val){
var selectedItem = sessionStorage.getItem("SelectedItem");
alert(selectedItem);
if(selectedItem){
var dropVal = $(this).val();
sessionStorage.setItem("SelectedItem", dropVal);
}
if (val=="dipinjam"){
$('#tarik_form').hide();
$('#rusak_form').hide();
$('#pinjam_form').show();
$('#moveform').attr('action','asetpindah.php');
}else if (val=="ditarik"){
$('#pinjam_form').hide();
$('#rusak_form').hide();
$('#tarik_form').show();
$('#moveform').attr('action','asettarik.php');
}else if(val=="rusak"){
$('#pinjam_form').hide();
$('#tarik_form').hide();
$('#rusak_form').show();
$('#moveform').attr('action','asetrusak.php');
}else{
$('#pinjam_form').hide();
$('#tarik_form').hide();
$('#rusak_form').hide();
}
}
您可以使用localStorage
存儲選定的值:
$('#mov_type').on('change', function() {
// Save value in localstorage
localStorage.setItem("mov_type", $(this).val());
});
在頁面刷新時,從localStorage獲取值並將其設置為select:
$(document).ready(function() {
if ($('#mov_type').length) {
$('#mov_type').val(localStorage.getItem("mov_type"));
}
});
並非所有瀏覽器都支持localStorage
。 您可以為此使用shims
或回退到cookie
。
如果您想清除localstorage
使用
localStorage.removeItem("mov_type");
更新
在您的情況下,僅當該頁面從另一個頁面redirected
,才需要清除localstorage
。 因此,您需要檢查頁面是否已reloaded or refreshed
。
if (performance.navigation.type == 1) {
console.info( "This page is reloaded" );
} else {
localStorage.removeItem("mov_type"); // clear localstorage
console.info( "This page is not reloaded");
}
並非所有瀏覽器都正確支持window.performance
,因此您可能需要檢查
if (window.performance) {
console.info("window.performance work's fine on this browser");
}
遍歷並比較值以設置選擇屬性:
$('select#id option').each(function() {
if ($(this).val() == dropVal) {
$(this).attr('selected', true);
}
});
要么
$("select#id option[value="+dropVal+"]").attr('selected', true);
在您的代碼中, selectedItem
始終為null,因為您是在if
塊中將所選值設置為sessionStorage。 刪除if塊,然后立即將所選選項設置為sessionStorage:
function showMov(val) {
sessionStorage.setItem('SelectedItem', val);
switch (val) {
case 'dipinjam':
{
$('#tarik_form').hide();
$('#rusak_form').hide();
$('#pinjam_form').show();
$('#moveform').attr('action', 'asetpindah.php');
break;
}
case 'ditarik':
{
$('#pinjam_form').hide();
$('#rusak_form').hide();
$('#tarik_form').show();
$('#moveform').attr('action', 'asettarik.php');
break;
}
case 'rusak':
{
$('#pinjam_form').hide();
$('#tarik_form').hide();
$('#rusak_form').show();
$('#moveform').attr('action', 'asetrusak.php');
break;
}
default:
{
$('#pinjam_form').hide();
$('#tarik_form').hide();
$('#rusak_form').hide();
}
}
}
另外,在DOM准備就緒時,也就是應該檢查sessionStorage是否具有SelectedItem
:
$(function() {
var selMovType = document.getElementById('mov_type');
var selectedItem = sessionStorage.getItem('SelectedItem');
if (selectedItem) {
selMovType.value = selectedItem;
}
});
這是一個jsfiddle 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.