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

Pin w JavaScript

Object Storage Arubacloud
+1 głos
242 wizyt
pytanie zadane 25 marca 2022 w JavaScript przez Maciek273 Początkujący (450 p.)

Witam. Mam problem z programem w JavaScript. Otóż po kliknięciu przycisku OK, niezależnie od wpisanego kodu zawsze wyświetla mi się zielony napis "Witaj w pracy". Nie mam pojęcia co zrobić, aby w przypadku wpisania złego kodu wyświetlał się czerwony komunikat o nieznajomości kodu PIN. Czy coś w tym kodzie źle przypisałem?

Tutaj treść zadania: 

•      Wciśnięcie przycisku „OK” powinno wyzwolić sprawdzenie numeru PIN:

◦    jeśli przekroczono dozwoloną ilość prób to powinien się wyświetlić akapit klasy „error” w sekcji klasy „msg”,

◦    jeśli wpisany numer pin jest poprawny (poprawny pin zapisano w atrybucie „data-pin” elementu „body”) to należy wyświetlić akapit klasy „success” w sekcji klasy „msg”,

A tutaj kod HTML, CSS i JavaScript:

<!DOCTYPE html>
<html>
  <head>
    <title>PS5 - Zadanie 1</title>
    <meta charset="utf-8">
    <link rel="stylesheet" href="zad1.css">
  </head>

  <body data-pin="4790">
    
    <section class="msg">
      <h2>Witaj w systemie firmowym!</h2>
      <p class="error">Niestety nie znasz numeru PIN!</p>
      <p class="success">Witaj w pracy!</p>
      <p class="info">Podaj PIN! Pozostała ilość prób: <span id="attempts" data-max="3">3</span></p>
    </section>
    
    <section class="secure">
      <h2 id="pin-display"></h2>
      <div class="keyboard">
        <div>
          <button value="1">1</button>
          <button value="2">2</button>
          <button value="3">3</button>
        </div>
        <div>
          <button value="4">4</button>
          <button value="5">5</button>
          <button value="6">6</button>
        </div>
        <div>
          <button value="7">7</button>
          <button value="8">8</button>
          <button value="9">9</button>
        </div>      
        <div>
          <button value="reset">Reset</button>
          <button value="0">0</button>
          <button value="ok">OK</button>
        </div>
      </div>
      <p>Bardzo Bezpieczna Firma S.A.</p>
    </section>
    
  <script src="zad1.js"></script>  
  </body>
</html>
* {
  box-sizing: border-box;
}

section {
  margin: 0;
  padding: 20px;
}

section.msg {
  position: absolute;
  top: 2%;
  left: 0;
  height: 20%;
  width: 100%;
}

section.msg h2, section.msg p {
  text-align: center;
}

section.msg p {
  font-weight: bold;
}

section.msg p.error {
  color: red;
  display: none;
}

section.msg p.success {
  color: green;
  display: none;
}

section.secure {
  position: absolute;
  top: 25%;
  left: 30%;
  width: 40%;
  height: 60%;
  border: 1px solid black;
  display: flex;
  flex-direction: column;
  justify-content: space-between;
  background-color: rgb(100,192,100);
  padding-bottom: 5px;
}

section.secure h2 {
  font-size: 30px;
  font-family: monospace;
  background-color: black;
  width: 100%;
  height: 40px;
  margin: 0;
  color: white;
  font-weight: bold;
  text-align: right;
  padding: 2px;
  border: 3px solid rgb(0,100,0);
}

section.secure p {
  text-align: right;
  font-style: italic;
}

div.keyboard {
  display: flex;
  flex-direction: column;
  justify-content: space-around;
  flex: 6;
}

div.keyboard > div {
  display: flex;
  justify-content: space-around;
}

div.keyboard > div > button {
  width: 25%;
  height: 3em;
  box-shadow: 3px 3px 5px rgba(0,0,0,0.5);
}

div.keyboard > div > button:active {
  box-shadow: none;
}
let przyciski = document.querySelectorAll('button');
let pin = document.querySelector('body').dataset.pin;
let obiekt = document.getElementById('pin-display');
let msgError = document.querySelector('section.msg p.error');
let msgSuccess = document.querySelector('section.msg p.success');


for(przycisk of przyciski){
	przycisk.addEventListener('click', function(event){
		kliknietoPrzycisk(event.target.value);
	});
}

function kliknietoPrzycisk(numer){
	if(numer == "reset"){
		obiekt.textContent = null;
	}
	else if(numer == "ok"){
		if(pin == "4790"){
			msgSuccess.style.display = 'block';
		}
		else{
			msgError.style.display = 'block';
		}
		obiekt.textContent = null;
	}
	else{
		obiekt.textContent = obiekt.textContent + numer;
	}
}

 

1 odpowiedź

+1 głos
odpowiedź 25 marca 2022 przez rafal.budzis Szeryf (85,260 p.)
wybrane 25 marca 2022 przez Maciek273
 
Najlepsza

Na samym początku pobierasz wartość z tego elementu 

<body data-pin="4790">

Robisz to w tej linijce 

let pin = document.querySelector('body').dataset.pin;

Potem spraawdzasz czy pobraana warość z body jest równa 

        if(pin == "4790"){
            msgSuccess.style.display = 'block';
        }

wieć zawsze bedzie true bo nie aktualizujesz wartości zmiennej pin względem tego co wpisuje user ;) 

Zamiast if(pin == "4790"){ daj if(obiekt.textContent == "4790"){

1
komentarz 25 marca 2022 przez VBService Ekspert (253,280 p.)

Zamiast if(pin == "4790"){ daj if(obiekt.textContent == "4790")

albo  wink

if (obiekt.textContent == pin)

skoro

let pin = document.querySelector('body').dataset.pin;

 

bo nie aktualizujesz wartości zmiennej pin względem tego co wpisuje user ;)

raczej powinno być: porównujesz.

komentarz 25 marca 2022 przez Maciek273 Początkujący (450 p.)
Dzięki, rozumiem już o co chodzi :)
komentarz 25 marca 2022 przez VBService Ekspert (253,280 p.)

BTW, zamieniłbym to  wink

else{
        obiekt.textContent = obiekt.textContent + numer;
}

na np.

    else{
      if (obiekt.textContent.length < 10)
        obiekt.textContent += numer;
    }

 

komentarz 25 marca 2022 przez VBService Ekspert (253,280 p.)

BTW, spróbuj zapoznać się z Event Delegation

przykład

window.onload = load; // window.addEventListener('load', load);

function load() {
  const pin = document.querySelector('body').dataset.pin,
        pinPanel = document.querySelector('section.secure'),
        pinDisplay = document.getElementById('pin-display'),
        msgError = document.querySelector('section.msg p.error'),
        msgSuccess = document.querySelector('section.msg p.success');

  pinPanel.onclick = pinPanelAction; // pinPanel.addEventListener('click', pinPanelAction);

  function pinPanelAction(e) {
    if (e.target.nodeName == 'BUTTON') {
      switch (e.target.value) {
        case 'reset': 
          pinDisplay.textContent = null; 
          break;
        case 'ok':
          if (pinDisplay.textContent == pin)
            msgSuccess.style.display = 'block';
          else {
            msgError.style.display = 'block';
            setTimeout(function() { msgError.style.display = 'none'; }, 2000);
          }

          pinDisplay.textContent = null;          
          break;
        default:
          if (pinDisplay.textContent.length < 10)
            pinDisplay.textContent += e.target.value;
      }
    } 
  }
}

 

komentarz 25 marca 2022 przez VBService Ekspert (253,280 p.)
edycja 25 marca 2022 przez VBService

BTW, a co powiesz na to wink

dodaj do <head>

<link href='https://fonts.googleapis.com/css?family=Orbitron&text=0123456789' rel='stylesheet' type='text/css'>

np.

  <head>
    <title>PS5 - Zadanie 1</title>
    <meta charset="utf-8">
    <link href='https://fonts.googleapis.com/css?family=Orbitron&text=0123456789' rel='stylesheet' type='text/css'>
    <link rel="stylesheet" href="zad1.css">
  </head>

i w css-ie

section.secure h2 {
  font-size: 1.1em/1.1;
  font-family: 'Orbitron', sans-serif;
  font-weight: bold;
  ...
}

żeby nie pobierać "całej czcionki" możemy wskazać, które znaki będą "potrzebne"  wink

https://fonts.googleapis.com/css?family=Orbitron&text=0123456789

Podobne pytania

0 głosów
3 odpowiedzi 364 wizyt
0 głosów
2 odpowiedzi 391 wizyt
0 głosów
0 odpowiedzi 299 wizyt

92,563 zapytań

141,413 odpowiedzi

319,590 komentarzy

61,948 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!

...