• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Generator haseł

Object Storage Arubacloud
0 głosów
1,150 wizyt
pytanie zadane 8 listopada 2018 w JavaScript przez Sobol3k Użytkownik (690 p.)

Stworzyłem generator haseł, ale nie do końca coś mi chce to działać. Wywala błąd o niepoprawnym rozmiarze tablicy to raz, a dwa że nie wiem czy dobrze sprawdzam że pole typu checkbox nie zostało zaznaczone.

<!DOCTYPE html>
<html lang="">
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title></title>
  <style>
      body{
          display: flex;
          justify-content: center;
          align-items: center;
          height: 100vh;
          padding: 0;
          margin: 0;
          background: linear-gradient(217deg, rgba(255,0,0,.8), rgba(255,0,0,0) 70.71%),
                      linear-gradient(127deg, rgba(0,255,0,.8), rgba(0,255,0,0) 70.71%),
                      linear-gradient(336deg, rgba(0,0,255,.8), rgba(0,0,255,0) 70.71%);
      }
      
      .container{
          width: 500px;
          height: 500px;
          background: rgba(255, 255, 255, 0.2);
          border: 2px dotted black;
          position: relative;
          text-align: center;
          border-radius: 10px;
          box-shadow: 1px 1px 55px 5px deepskyblue;
      }
      
      .container .block{
          margin: 10px;
      }
      
      .container-pass{
          margin: 20px auto;
          width: 50%;
          height: 70px;
          border: 2px solid black;
          border-radius: 10px;
      }
      
      .container-pass > strong{
          display: block;
          margin: 5px;
          font-size: 20px;
      }
      
      .created-password{
          margin: 5px 0 5px 0;
          font-size: 25px;
          font-weight: 900;
          color: gray;
      }
      
      h1{
          text-shadow: 5px 5px 5px gray;
      }
      
      button{
          display: inline-block;
          width: 150px;
          height: 60px;
          background: #666;
          border: 2px solid deepskyblue;
          border-radius: 5px;
          font-size: 15px;
          box-shadow: 1px 1px 70px 1px white;
          position: relative;
      }
      
      button:before{
          content: '';
          display: block;
          width: 40px;
          height: 57px;
          background: rgba(255, 255, 255, 0.3);
          position: absolute;
          left: 50%;
          top: 50%;
          transform: translate(-50%, -50%) skewX(-15deg);
      }
  </style>
</head>
<body>
  <div class="container">
    <h1>Generator haseł</h1>
    <fieldest>
      <legend>Wybierz z ilu znaków ma się składać</legend>
        <div class="block">
          <input type="radio" value="six" name="characters"> 6 - znaków
          <input type="radio" value="eight" name="characters"> 8 - znaków
          <input type="radio" value="ten" name="characters"> 10 - znaków
        </div>
    </fieldest>
    <div class="container-pass">
      <strong>Twoje Hasło:</strong>
      <p class="created-password">-------</p>
    </div>
    <button type="button" id="btn">Wygeneruj hasło</button>
  </div>
<script>
  const btn = document.querySelector('#btn');
  const charactersRadio = document.querySelectorAll('input[name="characters"]');
  const returnedPasswordToPelement = document.querySelector('.created-password');
  let selectedValue = null;
  let generatedPassword;
    
  var tab = [];
  tab[0] = 'a';
  tab[1] = '!';
  tab[2] = 'b';
  tab[3] = '@';
  tab[4] = 'c';
  tab[5] = '#';
  tab[6] = 'd';
  tab[7] = '%';
  tab[8] = 'e';
  tab[9] = '&';
  tab[10] = 'f';            

    btn.addEventListener("click", function(){
        
       for(const radio of charactersRadio){
           
           if(radio.checked) {
               let length = Number(radio.value);
               let newTab = new Array(length);
               
               for(let i=0; i<newTab.length; i++){
                   newTab[i] = Math.round(Math.floor()*(9-0+1)+0)
               }
               
               for(let j=0; j<newTab.length; j++){
                   generatedPassword += tab[newTab[j]];
               }
           }
           
       }
        
       if(radio.value === null){
           alert('Nie zaznaczyłeś żadnego pola!');
       }
        
        return returnedPasswordToPelement.textContent = generatedPassword;
    });
</script>
</body>
</html>

 

2 odpowiedzi

0 głosów
odpowiedź 8 listopada 2018 przez shotokan Nałogowiec (39,660 p.)
edycja 8 listopada 2018 przez shotokan

A jak ma nie wywalać błędu skoro Ty przekazujesz jako wielkość tablicy wartość pola radio czyli "six", "eight" lub "ten".
Rozmiar tablicy musi być liczbą.
 

pole typu checkbox

 a gdzie Ty masz w swoim kodzie takie pole? Input typu radio to nie checkbox.

Edit:
I co to w ogóle jest?

newTab[i] = Math.round(Math.floor()*(9-0+1)+0)

jak już coś to zamiast Math.floor() powinno być raczej Math.random().

Moim zdaniem trochę ten kod zamotałeś. Proponuję zapoznać się z dokumentacją obiektu Number.
 

1
komentarz 8 listopada 2018 przez Tomek Sochacki Ekspert (227,510 p.)

Math.round(Math.floor()*(9-0+1)+0)

zapis pozwalający uzyskać NaN :)

a tak serio to ostatnio w pracy mieliśmy rozkmine jak uzyskać undefined w jak najmniejszej liczbie znaków... i wygrała wersja:

[].x

4 znaki vx 9 znaków w "undefined" :D

komentarz 8 listopada 2018 przez shotokan Nałogowiec (39,660 p.)
Ale po co tak komplikować życie, nie prościej wpisać po prostu value="6" ? I po co tworzyć nową tablicę? Nie prościej wylosować te 6 znaków z już istniejącej?
0 głosów
odpowiedź 9 listopada 2018 przez Sobol3k Użytkownik (690 p.)
Dziękuję Panowie już sobie poradziłem rzeczywiście gafe walnąłem z tym losowaniem i przypisaniem stringa do value :)

Podobne pytania

0 głosów
1 odpowiedź 271 wizyt
0 głosów
1 odpowiedź 112 wizyt
pytanie zadane 20 stycznia 2023 w JavaScript przez pazo1313 Nowicjusz (140 p.)
+4 głosów
4 odpowiedzi 1,443 wizyt
pytanie zadane 29 kwietnia 2015 w Nasze projekty przez Do.Zzay Mądrala (5,700 p.)

92,570 zapytań

141,422 odpowiedzi

319,643 komentarzy

61,958 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...