У меня есть скрипт в хорошем рабочем состоянии, который проверяет, был ли назначен посетителю код купона, но хотел добавить функциональность, которая извлекает код купона, который им был назначен, и отображает его. Оба полагаются на свойство местное хранилище. Проблема, с которой я сталкиваюсь, заключается в том, что когда я отображаю сохраненное значение, оно возвращает [object HTMLSpanElement]
вместо значения, которое должно быть присвоено.
Практически все, что я нашел по этой проблеме, связано с областью действия, но я не понимаю, как у меня возникла проблема с областью действия ... даже пытался сделать переменные глобальными в области видимости, и это, похоже, ничего не дало.
Вот JS:
if (localStorage.getItem("visited") != "true"){
localStorage.setItem("visited","true");
var codeValue = document.getElementById("code");
localStorage.setItem("code",codeValue);
}
else {
var savedCode = localStorage.getItem("code");
document.getElementById("message").innerHTML = "You've already been assigned coupon code " + savedCode;
}
Вот соответствующий HTML:
<span id = "message">Your coupon code is: <span id = "code">CODE1234</span></span>
Когда вы возвращаетесь на страницу после того, как уже посетили ее, я ожидаю, что текст диапазона отобразится You've already been assigned coupon code CODE1234
, но вместо этого он возвращается You've already been assigned coupon code [object HTMLSpanElement]
Обратите внимание, что часть сценария была чем-то, что я создал раньше и запустил в производство, и я в основном использую эту функциональность. Раньше, если getItem("visited") != "true"
возвращал false, появлялось всплывающее окно с предупреждением о том, что вам уже дали код, а затем перенаправляли вас на другую страницу.
document.getElementById("code")
возвращает HTMLSpanElement
. Если вы хотите текст, получите textContent
. Если вам нужен его HTML, используйте innerHTML
.
Вероятно, дубликат javascript getElementById и преобразовать его в строку
Вы сохраняете сам элемент (который является объектом) в местное хранилище. Вы должны сохранить текст элемента.
Изменять
var codeValue = document.getElementById("code");
К
var codeValue = document.getElementById("code").textContent;
Пожалуйста, обрати внимание: Согласно Window.localStorage
The keys and the values are always strings (note that, as with objects, integer keys will be automatically converted to strings).
Вы не можете хранить HTMLElement
в localStorage. Он сохраняет результат toString()
в localStorage.
@HereticMonkey, вы правы, обновил ответ, спасибо :)
Да, это была проблема. Спасибо!
вам нужно получить доступ к тексту внутри элемента, здесь вы сохраняете элемент html внутри локального хранилища. изменить код для доступа к тексту
document.getElementById('code').innerText
var codeValue = document.getElementById("code");
— это не значение, это элемент.