Member 13257242 Ответов: 1

Переменная не истощает javascript


- Привет! Я создаю игру, в которой вы можете купить покемонов. Когда покемон покупается, я, очевидно, хочу, чтобы переменная coins упала на количество монет, которые стоит покемон. Однако, когда я это делаю, переменная монет всегда остается на уровне 1000 и не падает, когда я покупаю покемона. Здесь-это функция, которая используется, когда функция onclick на кнопке:

function buymagikarp() {
  if(coins >= 100 ) {
    swal("Success", "You bought 1 magikarp!", "success");
    coins - 100;
    pokemonchosen.push("Magikarp");
  } else {
    swal("Error", "Not enough balance", "error");
  }
}


Что я уже пробовал:

Я попытался удалить swal (""), чтобы увидеть, не испортили ли оповещения переменную coins.

Member 13257242

Немного подправив код, я сделал шаг назад и шаг вперед. Я добавил в локальное хранилище:

функция getName() {
монеты var;
если(хранилище localStorage.метод getitem ("монеты") = = = значение null) {
localStorage. setItem('coins', монеты);
} еще {
coins = localStorage. getItem ('монеты');
}
document.getElementById("p1"). innerHTML = "Coins:" + coins;
}

Теперь монеты действительно истощаются, и они сохраняются после перезагрузки страницы, но они все равно всегда отображаются как 1000, даже в консоли, когда я набираю монеты, это показывает, что они истощены? Честно говоря, это действительно сбивает меня с толку.

1 Ответов

Рейтинг:
0

Thomas Daniels

coins - 100 просто вычисляет значение, но никогда не сохраняет его. Вы имели в виду:

coins -= 100; // (equivalent of:) coins = coins - 100;
?


Member 13257242

Немного подправив код, я сделал шаг назад и шаг вперед. Я добавил в локальное хранилище:

функция getName() {
монеты var;
если(хранилище localStorage.метод getitem ("монеты") = = = значение null) {
localStorage. setItem('coins', монеты);
} еще {
coins = localStorage. getItem ('монеты');
}
document.getElementById("p1"). innerHTML = "Coins:" + coins;
}

Теперь монеты действительно истощаются, и они сохраняются после перезагрузки страницы, но они все равно всегда отображаются как 1000, даже в консоли, когда я набираю монеты, это показывает, что они истощены? Честно говоря, это действительно сбивает меня с толку.

Thomas Daniels

Где вы определяете coins? Вы также определяете его вне getName? В этом случае "монеты" в getName, вероятно, затеняют "монеты" за пределами getName.

Member 13257242

Я определяю монеты снаружи в верхней части кода.

var монет = 1000;

Thomas Daniels

Ну, тогда вам не нужна строка 'var coins;' в getName ().

Member 13257242

Даже после удаления var coins;, он все равно не истощится

Thomas Daniels

Вы вызываете сеттер localStorage каждый раз, когда меняете переменную coins? Меняете ли вы HTML-элемент каждый раз, когда делаете это?

Member 13257242

Как бы я изменил сеттер localStorage? С помощью цикла while? Я использую этот код для запуска localstorage:

Member 13257242

это код, который я использую для запуска локального хранилища.

Member 13257242

body onload= " getName();"

Member 13257242

с тегами, конечно, по какой-то странной причине codeproject не отображает теги.

Thomas Daniels

Каждый раз вы меняете значение "монет", вам нужно:

Позвоните в "setItem" для localStorate
Измените HTML-содержимое элемента, отображающего значение

Если вы этого не сделаете, то значение "монеты" не будет сохранено после обновления.

Member 13257242

Какой HTML-контент? Чтобы отобразить переменную coins, я использую абзац с идентификатором p1 для отображения. Как бы я это изменил? это document.getElementById('p1'). innerHTML = "Coins:" + coins;

Thomas Daniels

Да, это так, но вам нужно делать это каждый раз, когда вы обновляете переменную "монеты", иначе изменения не будут отражены.

Member 13257242

Спасибо за ответ ProgramFox, это действительно помогло!