Привет, ребята, я пытаюсь сгенерировать случайный пароль, используя клавиши верхнего и нижнего регистра + цифры. код, кажется, работает, но вместо того, чтобы возвращать 20 символов, он возвращает только 1. Возврат кажется случайным. Элемент должен быть заменен, почему случайный пароль каждый раз, когда нажимается кнопка.
HTML
<button id = "button5" onclick = "password()">Generate password </button>
<p4 id = "p4" > Your password will apear here </p4>
Это Javascript
function password (length ) {
var ranpassword = "";
var chara = "abcdefghijklmnopqrstuvwxyz01234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ"
var charalength = chara.length // there is an outside variable defining charalength = ""; I could not include that here
for (var i = 0; <length ; i++) {
ranpassword += chara.charAt(Math.floor(Math.random() *
chara.length));
return ranpassword;
}
document.getElementById("p4").innerHTML = "hello there " + ranpassword;
console.info(password(20));
}
всякий раз, когда нажимается кнопка, в console.info возвращается одна случайная буква, и я не могу понять, почему? Кто-нибудь может сказать мне, почему? Любая помощь будет здорово. Спасибо :)
Что ты имеешь в виду ? где я могу включить сравнение "i" в ?
потому что у вас есть return
в тело цикла ... Сделайте правильный отступ, и вы увидите проблему ...
вынул обратку и теперь работает
И у вас синтаксическая ошибка в объявлении цикла (но это может быть только опечатка) for (var i = 0; ***i is missing here*** < length; i++)
о, на самом деле я включил i, я просто забыл включить его в код. проблема заключалась в операторе возврата, я считаю, что он останавливал выполнение кода несколько раз и останавливал его после достижения одного, поэтому он возвращал только один символ.
Вы сделали какую-то ошибку. Попробуйте этот код,
function password (length) {
let ranpassword = "",
chara = "abcdefghijklmnopqrstuvwxyz01234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ",
charalength = chara.length;
for (var i = 0; i<length ; i++) {
ranpassword += chara.charAt(Math.floor(Math.random() *
chara.length));
}
document.getElementById("p4").innerHTML = "hello there " + ranpassword;
}
<button id = "button5" onclick = "password(20)">Generate password </button>
<p4 id = "p4" > Your password will apear here </p4>
спасибо, я на самом деле понял это за 2 секунды до того, как вы написали. Выдает ошибку, что превышен размер стека вызовов, но все равно работает. Благодарю вас !
@aguywithquestions Хорошо, отлично!
Помимо частично неправильной реализации вашей функции password
, вы не передаете функцию length
в password()
в своем обработчике onclick
.
Вам нужно пройти length
, а также password(20)
:
<button id = "button5" onclick = "password(20)">Generate password </button>
ооо ок, я не знал, спасибо
как сказал @Locke, ваш синтаксис цикла for неверен, так как вы отсутствуете i
в сравнении. Кроме того, ваш код заполнен опечатками. Вы не закрыли цикл for, и вам не нужно было возвращаться ranpassword
. Теперь ваш код работает, обратите внимание, что число, которое я указал в качестве параметра в onclick в HTML, является длиной вашего пароля. Кроме того, вместо использования .chatAt
я генерирую случайное число и добавляю его к ranpassword
. Например: цикл for получает chara[4], поэтому randpassword имеет 5-ю букву chara.
function password(length) {
var ranpassword = "";
var chara = "abcdefghijklmnopqrstuvwxyz01234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ"
var charalength = chara.length // there is an outside variable defining charalength = ""; I could not include that here
for (var i = 0; i < length; i++) {
ranpassword += chara[(Math.floor(Math.random() *
chara.length))];
}
document.getElementById("p4").innerHTML = "hello there " + ranpassword;
}
<button id = "button5" onclick = "password(4)">Generate password </button>
<p4 id = "p4" > Your password will apear here </p4>
я исправил проблему
function password(length) {
var ranpassword = "";
var chara = "abcdefghijklmnopqrstuvwxyz01234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ";
var charalength = chara.length;
for (var i = 0; i < length; i++) {
ranpassword += chara.charAt(Math.floor(Math.random() * chara.length));
}
return ranpassword;
}
console.info(password(5));
вы возвращали пароль из цикла, поэтому он возвращал один символ
Честно говоря, 1 символ впечатляет, учитывая, что ваш цикл for должен был вызвать ошибку
for (var i = 0; <length ; i++)
. Вам не хватаетi
в сравнении.