我正在为iAd Producer制作HTML视图。我正在尝试添加一个句子列表,其中包含学生可以选择的替代词,并将这些值保存到localStorage,因为他们更改并在重新访问页面时使用这些值重新填充选择。
我正在调整我编写的一些代码,它可以很好地保存页面上的多个输入框。但是当我尝试使用多个选择时,我有奇怪的行为。基本上,无论答案在哪个顺序完成,只存储最后选择的值。重新访问页面时,代码会尝试将该值放入每个选择中。当然,这对于没有相应值的两个选择都是失败的。
我不明白为什么会发生这种情况,并希望有人能够发现这一点。感谢。
<div>
<script type="text/javascript">
var uniqueId = "FC2-U2-A-P29";
$(document).ready(function () {
function onStartup() {
$.each( $("select"), function() {
if (localStorage[$(this).attr("value")+uniqueId]) {
$(this).val(localStorage[$(this).attr("value")+uniqueId]);
}
});
}
onStartup();
});
$('.drop').change(function () {
localStorage[$(this).attr("value")+uniqueId] = $(this).val();
});
</script>
<form>
<label class="number">1.</label>
<label class="text">Breakfast is the </label>
<select name="select1" class="drop">
<option value="blank">Choose a word</option>
<option value="one1">one</option>
<option value="first1">first</option>
</select>
<label class="text"> meal of the day.</label>
<br>
<label class="number">2.</label>
<label class="text">I always eat </label>
<select name="select2" class="drop">
<option value="blank">Choose a word</option>
<option value="three2">three</option>
<option value="third2">third</option>
</select>
<label class="text"> meals a day.</label>
<br>
<label class="number">3.</label>
<label name="select3" class="text">My football team is in</label>
<select class="drop">
<option value="blank">Choose a word</option>
<option value="two3">two</option>
<option value="second3">second</option>
</select>
<label class="text"> place in the league.</label>
<br>
<button class="clearButton" onclick="clearAnswers()">Clear </button>
<script type="text/javascript">
function clearAnswers() {
$.each( $("select"), function() {
if (localStorage[$(this).attr("value")+uniqueId]) {
localStorage.removeItem($(this).attr("value")+uniqueId);
$(this).val("blank");
}
location.reload();
});
}
</script>
</form>
</div>
答案 0 :(得分:1)
此代码在select中失败的可能原因是由于以下原因:
$.each( $("select"), function() {
if (localStorage[$(this).attr("value")+uniqueId]) { //select doesn't have any attribute value.
$(this).val(localStorage[$(this).attr("value")+uniqueId]);
}
});
选择标记没有任何值属性。我认为.val()
就是你所需要的。如果你看一下代码,你基本上是在select选择标签上进行迭代并检查select的value
属性(不存在)。尝试将其更改为.val(),然后尝试。
答案 1 :(得分:1)
要从localstorage使用保存和加载内容:
localStorage.setItem(<key>, <value>);
和
localStorage.getItem(<key>);
答案 2 :(得分:0)
您的选择器无效。
在所有事件中使用$(this).attr("value")+uniqueId
更改$("option:selected",this ).text()+uniqueId;
。
答案 3 :(得分:0)
您的代码存在多个问题。
第一个是您应该使用.val()
而不是.attr('value')
。
第二个是在完全创建DOM之前执行在localStorage中添加值的代码,因此选择不存在。要解决此问题,您需要在document.ready(aka $(function() { });
)上绑定change事件。
我使用修改后的代码制作了一个pastebin:http://jsbin.com/jubijuyatu/2/