0

私が作成したプラグインのこの部分は、プレイヤーがドロップダウン リストから消費可能なアイテムと、使用したい数を選択できるようにするものです。最近、彼らが行った選択が、後でページに戻ったときにまだそこにあることが要求されました. これは localstorage の仕事のようですね! 問題は、ユーザーが戻り、localstorage によって値が正しく設定されたときに、onchange イベントによって通常設定される ConsumableNUM の値が設定されないことです。

ここに現在の選択リストとボタンがあります

<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;
}

ありがとう!

編集

理由はわかりませんが、同じ方法を 2 番目の選択リストに適用しようとすると、機能しません。値を保存していないか、間違った値を返すことがあります! 2 番目のリストとその機能は次のとおりです。

<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;
}
4

1 に答える 1

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
}

2 番目の質問に対して: そこに値のないオプションがあります。これが違いを生む可能性があります。落として確かめてみてください。

于 2013-06-26T14:34:34.837 に答える