Это мой первый пост и второй день с Javascript;). Я пытаюсь создать простую форму, которая:
Мой скрипт не помнит количество попыток. Более того, он сохраняет данные в массиве, но после выполнения скрипта он стирает все (я помещаю в скрипт некоторую консоль.log(), чтобы увидеть, что-нибудь делает). Похоже, что мой счетчик переменных не помнит количество попыток :(.
Как я могу это исправить? - но простым способом кодирования :) (я не хочу делать много изменений в моем коде)
<script type= "text/javascript">
var given_letters = []; // create an empty array
function givenLetter() {
var count = 0;
var max_count = 10;
var letter = document.getElementById('letter').value;
while (count < max_count) {
if (letter === "") {
alert("No letter given");
return false;
} else {
count++;
given_letters.unshift(letter);
console.log(letter); // returns letter
console.log(given_letters); // returns array with 1 element
console.log(count); // returns "1"
alert("OK");
return true;
}
}
while (count === max_count) {
alert("Sorry. You exceeded the limit of tries.");
return false;
}
}
</script>
// in BODY section
<div>
<form><p>Put your letter here: <input type="text" id="letter" size="5" required><button onclick="givenLetter();">Send</button></p></form>
</div>
Попробуй это. Так как кнопка я в теге формы вводит по умолчанию поведение кнопки. поэтому форма будет отправлена и перезагрузится. Поэтому для предотвращения такого поведения мы используем event.preventDefault();
и сделать счет как глобальную переменную.
var given_letters = []; // create an empty array
var count = 0;
function givenLetter() {
event.preventDefault(); //to prevent reloading the page.
var max_count = 10;
var letter = document.getElementById('letter').value;
while (count < max_count) {
if (letter === "") {
alert("No letter given");
return false;
}
else {
count++;
given_letters.unshift(letter);
console.log(letter); // returns letter
console.log(given_letters); // returns array with 1 element
console.log(count); // returns "1"
alert("OK");
return true;
}
}
while (count === max_count) {
alert("Sorry. You exceeded the limit of tries.");
return false;
}
}
<div>
<form>
<p>Put your letter here: <input type="text" id="letter" size="5" required>
<button onclick="givenLetter();">Send</button></p></form>
</div>
Вы можете использовать given_letters.length
вместо count
, меньше кода и того же значения, вам нужно использовать e.preventDefault();
поэтому форма еще не отправляет форму, вот ее рабочий пример для e.preventDefault();
для работы вам нужно отправить событие в кнопку, например:
<div>
<form>
<p>Put your letter here: <input type="text" id="letter" size="5" required>
<button onclick="givenLetter(event);">Send</button></p>
</form>
</div>
JS обновлено:
var given_letters = []; // create an empty array
function givenLetter(e) {
e.preventDefault();
var max_count = 10;
var letter = document.getElementById('letter').value;
while (given_letters.length <= max_count) {
if (letter === "") {
alert("No letter given");
return false;
}
else {
given_letters.unshift(letter);
console.log(letter); // returns letter
console.log(given_letters); // returns array with 1 element
console.log(given_letters.length);//here is your count already
alert("OK");
return true;
}
}
while (given_letters.length === max_count) {
alert("Sorry. You exceeded the limit of tries.");
return false;
}
}
Поведение кнопки по умолчанию в форме - это отправить форму... и перезагрузить страницу (довольно глупо, ИМО). Вот почему ваш сценарий, похоже, ничего не помнит. Но есть способ предотвратить это. Кроме того, напишите var count = 0;
вне функции, иначе она будет установлена на 0 при каждом вызове функции.
var count = 0;
function givenLetter(event) {
event.preventDefault();
// ....
while (count === max_count)
... вы получите неприятный сюрприз при выполнении этого условия.onclick="givenLetter();
), вместо этого присоедините EventListener.