#javascript #html
Вопрос:
Я делаю простую игру для развлечения, и кнопка, которую я использую, чтобы дать вам что-то, не работает:
<!DOCTYPE html>
<html lang="en">
<head>
<title>Keys</title>
<script>
var keys = 0;
window.onload = function() {
document.getElementById("count").innerHTML="You have " keys " keys.";
}
function increase_keys() {
keys ;
}
</script>
</head>
<body>
<button onclick="increase_keys()">Make Keys</button>
<p id="count"></p>
</body>
</html>
Я попытался присвоить кнопке идентификатор, определяющий, когда на нее нажимают, но это, похоже, тоже не работает:
<!DOCTYPE html>
<html lang="en">
<head>
<title>Keys</title>
<script>
var keys = 0;
window.onload = function() {
document.getElementById("count").innerHTML="You have " keys " keys.";
}
if(document.getElementById('give_key').clicked == true) {
keys ;
}
</script>
</head>
<body>
<button id="give_key">Make Keys</button>
<p id="count"></p>
</body>
</html>
Все остальное работает: я могу изменить значение keys
на любое число, и оно отображается правильно, это всего лишь одна кнопка. Я уверен, что это не то, что я использую, я скопировал код на свое устройство и получил тот же результат.
Ответ №1:
Я думаю , что вы видите, что элемент p, который устанавливается document.getelementbyid
, обновляется только при загрузке страницы.
Вместо этого поместите функцию, которая устанавливает элемент p в свою собственную функцию, а затем используйте функцию setInterval
JS в цикле. (Посмотрите, что вы хотите узнать, это функциональность)
Другими словами, переменная обновляется, это текст, которого нет. Ваш код для этого должен выглядеть следующим образом:
function setkeys() {
document.getElementById("count").innerHTML="You have " keys " keys.";
}
setInterval(setkeys, 1000);
Ответ №2:
Вот измененная версия кода mti2935. Он не использует глобальные переменные, вместо этого код считывает количество ключей со страницы, увеличивает число на 1 и обновляет страницу. Нет необходимости вызывать функцию при загрузке страницы, начальное значение уже отображается на странице во время загрузки.
Он также отображает «1 клавиша», «2 клавиши» и т.д. Такие маленькие штрихи — это то, что отличает вас от обычного разработчика.
<!DOCTYPE html>
<html lang="en">
<head>
<title>Keys</title>
</head>
<body>
<button onclick="increase_keys()">Make Keys</button>
<p>You have <span id="count">0</span> key<span id="plural">s</span>.</p>
</body>
<script>
function increase_keys() {
var oldKeyCount = document.getElementById("count").innerHTML;
var newKeyCount = parseInt(oldKeyCount,10) 1;
document.getElementById("count").innerHTML = newKeyCount;
if (newKeyCount=="1") {
document.getElementById("plural").innerHTML="";
} else {
document.getElementById("plural").innerHTML="s";
}
}
</script>
</html>
Я создал скрипку здесь: https://jsfiddle.net/texasswede/m75kzqr3/
Комментарии:
1. Я даже не думал об обновлении, я думал, что JS волшебным образом обновил все. Я думаю, что невежество-это не блаженство в мире программирования. Спасибо вам (и всем остальным) за отзывы и ответы. Если я могу вас кое о чем спросить, зачем ставить
<script>
тег после содержимого? Я слышал, что люди помещают внутренний CSS после тела, чтобы ускорить загрузку страницы, это то же самое для JS?
Ответ №3:
1) Вы должны поместить JS в нижней части body
.
2) Вы отображаете текстовое сообщение только один раз. Вы должны обновлять его после каждого нажатия кнопки
<!DOCTYPE html>
<html lang="en">
<head>
<title>Keys</title>
</head>
<body>
<button onclick="increase_keys()">Make Keys</button>
<p id="count"></p>
<script>
var keys = 0;
function render() {
document.getElementById("count").innerHTML = "You have " keys " keys.";
}
function increase_keys() {
keys ;
render()
}
// Render first time only
render()
</script>
</body>
</html>
Ответ №4:
Когда вы нажимаете на кнопку, она вызывает increase_keys()
функцию. Это increase_keys()
увеличивает значение keys
, но после этого больше ничего не делает. Таким образом, новое значение keys
никогда не отображается.
Я немного перестроил вашу программу, чтобы создать новую функцию showkeys()
, которая отображает значение keys
. showkeys()
вызывается изнутри increase_keys()
, так что значение keys
отображается после его увеличения. showkeys()
также вызывается из windows.onload
, чтобы значение keys
» от » отображалось при загрузке страницы.
<!DOCTYPE html>
<html lang="en">
<head>
<title>Keys</title>
</head>
<body>
<button onclick="increase_keys()">Make Keys</button>
<p id="count"></p>
</body>
<script>
var keys = 0;
window.onload = function() {
showkeys();
}
function increase_keys() {
keys ;
showkeys();
}
function showkeys() {
document.getElementById("count").innerHTML="You have " keys " keys.";
}
</script>
</html>