2013-06-26 5 views
0

У меня есть эта часть плагина, который я написал, что позволяет игроку выбрать расходный элемент из выпадающего списка и сколько они хотели бы использовать. Недавно было предложено, чтобы их выбор оставался, когда они вернулись на страницу позже. Это звучит как работа для localstorage! Проблема заключается в том, что когда пользователь возвращается и значение правильно устанавливается localstorage, оно не устанавливает значение ConsumableNUM, обычно заданное событием onchange.Использование localstorage с списком выбора и переменной

Вот текущий список и кнопка выбора

<input type="button" class="btnFJ" value="Energy" onclick="ACTIONS.use_consumable(EnergyCons,ConsumableNUM)"> 
<form style="display: inline"> 
<SELECT class="FJselect" name="numberconsumables" style="width: 54px" id="FJsconsumables" onchange="ConsumableNUM = this.options[selectedIndex].value;"> 
<OPTION class="FJoptionBG1" selected value="1">1</OPTION> 
<OPTION class="FJoptionBG2" value="2">2</OPTION> 
<OPTION class="FJoptionBG1" value="3">3</OPTION> 
<OPTION class="FJoptionBG2" value="4">4</OPTION> 
<OPTION class="FJoptionBG1" value="5">5</OPTION> 
<OPTION class="FJoptionBG2" value="6">6</OPTION> 
<OPTION class="FJoptionBG1" value="7">7</OPTION> 
<OPTION class="FJoptionBG2" value="8">8</OPTION> 
<OPTION class="FJoptionBG1" value="9">9</OPTION> 
<OPTION class="FJoptionBG2" value="10">10</OPTION> 
<OPTION class="FJoptionBG1" value="11">11</OPTION> 
<OPTION class="FJoptionBG2" value="12">12</OPTION> 
<OPTION class="FJoptionBG1" value="13">13</OPTION> 
<OPTION class="FJoptionBG2" value="14">14</OPTION> 
<OPTION class="FJoptionBG1" value="15">15</OPTION> 
<OPTION class="FJoptionBG2" value="16">16</OPTION> 
<OPTION class="FJoptionBG1" value="17">17</OPTION> 
<OPTION class="FJoptionBG2" value="18">18</OPTION> 
<OPTION class="FJoptionBG1" value="19">19</OPTION> 
<OPTION class="FJoptionBG2" value="20">20</OPTION> 
<OPTION class="FJoptionBG1" value="21">21</OPTION> 
<OPTION class="FJoptionBG2" value="22">22</OPTION> 
<OPTION class="FJoptionBG1" value="23">23</OPTION> 
<OPTION class="FJoptionBG2" value="24">24</OPTION> 
<OPTION class="FJoptionBG1" value="25">25</OPTION> 
<OPTION class="FJoptionBG2" value="26">26</OPTION> 
<OPTION class="FJoptionBG1" value="27">27</OPTION> 
<OPTION class="FJoptionBG2" value="28">28</OPTION> 
<OPTION class="FJoptionBG1" value="29">29</OPTION> 
<OPTION class="FJoptionBG2" value="30">30</OPTION> 
<OPTION class="FJoptionBG1" value="50">50</OPTION> 
<OPTION class="FJoptionBG2" value="100">100</OPTION> 
<OPTION class="FJoptionBG1" value="500">500</OPTION> 
</SELECT> 
</form> 

и здесь установка LocalStorage, которая напоминает ранее выбранное значение.

document.getElementById("FJsconsumables").onchange = function() { 
localStorage.setItem('FJsconsumables', document.getElementById("FJsconsumables").value); 
} 
if (localStorage.getItem('FJsconsumables')) { 
document.getElementById("FJsconsumables").options[localStorage.getItem('FJsconsumables')].selected = true; 
} 

Спасибо!

EDIT

Не знаю почему, но, когда я пытаюсь применить тот же метод к второму списку выбора он не работает. Это либо не сохраняет значение, либо иногда возвращает неверный! Второй список и функция для нее ниже:

<form style="display: inline"> 
<SELECT class="FJselect" name="typeofconsumables" style="width: 110px" id="FJConsumable"> 
<option>-Energy</option> 
<OPTION class="FJoptionBG1b" value="1">Energy Drink - 10</OPTION> 
<OPTION class="FJoptionBG1b" value="5">Energy Infusion - 20</OPTION> 
<OPTION class="FJoptionBG1b" value="9">Atomic Energizer</OPTION> 
<OPTION class="FJoptionBG1b" value="11">Nucleic Reaction - 50</OPTION> 
<OPTION class="FJoptionBG1b" value="609">NUCLEIC ENERGY - 50</OPTION> 
<OPTION class="FJoptionBG1b" value="234">Red Line - 55</OPTION> 

<OPTION class="FJoptionBG2" value="523">SHC Present - 155</OPTION> 
<OPTION class="FJoptionBG1" value="489">Hallow Skull - 160</OPTION> 
<OPTION class="FJoptionBG2" value="499">Red Eyeball - 203</OPTION> 
<OPTION class="FJoptionBG1" value="501">Blue Eyeball - 203</OPTION> 
<OPTION class="FJoptionBG2" value="503">Yellow Eyeball - 203</OPTION> 
</select> 

и функция:

document.getElementById("FJConsumable").onchange = function() { 
localStorage.setItem('FJConsumable', document.getElementById("FJConsumable").value); 
} 
if (localStorage.getItem('FJConsumable')) { 
document.getElementById("FJConsumable").options[localStorage.getItem('FJConsumable')].selected = true; 
} 
+0

Вы задаете выбор после выбора в DOM? Показанный сценарий в голове вашего документа не будет работать. –

+0

Сценарий был основан на этом jsfiddle, который кто-то разместил в другом потоке - http://jsfiddle.net/Lyxut/6/ –

+0

Он вызывает ранее выбранное значение при возврате пользователя. –

ответ

0

Установка параметра, как выбрано не вызывает ваш OnChange обработчик. Вот почему ваша глобальная переменная не определена. Установите значение в явном виде:

if (localStorage.getItem('FJsconsumables')) { 
    document.getElementById("FJsconsumables").options[localStorage.getItem('FJsconsumables')].selected = true; 
    ConsumableNUM = localStorage.getItem('FJsconsumables'); 
} else { 
    ConsumableNUM = "1"; // or whatever is a usefull default value here 
} 

К вашему второму вопросу: У вас есть возможность без значения там, это может сделать разницу. Попытайтесь бросить его, чтобы убедиться.

+0

Хммм ... все еще возвращает ConsumableNUM как не определено. :( –

+0

Я думаю, что у меня есть это! Отбросив использование ConsumableNUM и вместо этого используя localStorage.getItem ('FJsconsumables'), в этом месте все кажется счастливым! Большое спасибо за вашу помощь! –

+0

Любая причина, по которой тот же метод не был бы 't работать для другого выбора на той же странице? Другой частью функции кнопки является список именованных элементов с числовыми значениями. –