Przypsianie kilku zmiennym wartości z tablicy

0

Tak to wygląda https://jsfiddle.net/ymuj2ca0/. Co dalej?

0

Co do obecnego kodu:

  1. Zmieniłbym nazwę parametru funkcji getRandomVariants na questionIndex; uważam, że obecna nie jest intuicyjna; wolałbym uniknąć późniejszych pomyłek.
  2. Nazwa zmiennej powinna być answerIndices, a nie answerIndicies (zauważ brak ostatniej litery i; "indices" to jedna z form liczby mnogiej rzeczownika "index" -> https://www.diki.pl/slownik-angielskiego?q=index).
  3. Literówka w jednym miejscu: powinno być answersIndicies, a nie answerIndicies (zauważ literkę s po ciągu znaków answer).

Zanim zaczniemy wyświetlać odpowiedzi, trzeba poprawić dwie rzeczy:

  1. Funkcja getRandomQuestion powinna zwracać zmienną currentRandomIndex. Wiem, że wcześniej napisałem co innego, ale teraz uważam, że dla spójności kodu trzeba to zmienić. Z nazwą co prawda będzie taki sam problem, jak przy funkcji getRandomVariants (o czym wcześniej pisałem), ale nie ma co się teraz tym przejmować (spójność nad intuicyjność).
  2. Kod HTML: masz nieodpowiednie elementy oznaczone jako "etykiety". Żeby było intuicyjnie, to zrób tak, żeby elementy <label> miały tę wartość atrybutu id, co obecnie elementy <input>, a elementy <input> żeby miały tę wartość atrybutu id, co obecnie elementy <label>. Poza tym wartość atrybutu for elementów label trzeba zmienić na wartość atrybutu id elementów <input> po zmianie opisane w poprzednim zdaniu. Czyli, przykładowo:

    <input type="radio" id="label-answer_A" name="answer" class="answer">
    <label id="a" for="label-answer_A"></label>

    trzeba zmienić na

    <input type="radio" id="a" name="answer" class="answer">
    <label id="label-answer_A" for="a"></label>
0

https://jsfiddle.net/s9bf21yv/ chyba coś jest nie tak?

2
  1. return answersIndicies; zmień na return answersIndices; (zauważ usunięcie ostatniej litery "i").
  2. Rzeczywiście jest nie tak, o tyle, że zapomniałem wcześniej powiedzieć, że za zmianą wartości zwracanej z funkcji getRandomQuestion powinna iść zmiana kodu w funkcji showRandomQuestion. A więc:
    2.1. Nazwę zmiennej displayQuestQiz zmień na displayQuestQizIndex.
    2.2. Stwórz nową zmienną questionObject i przypisz jej wyrażenie quizArr[displayQuestQizIndex].
    2.2. Właściwości innerHTML przypisz wyrażenie questionObject.question.

I po poprawieniu tych rzeczy możesz przejść do wyświetlania odpowiedzi:

  1. Stwórz nową zmienną variants.
  2. Właściwości innerHTML każdego z obiektów labelAnswerA, labelAnswerB, labelAnswerC i labelAnswerD przypisz wyrażenie questionObject.answers[variants[X]];, gdzie X zmieniaj na kolejne liczby: 0, 1, 2 oraz 3.
  3. Powinny wyświetlać się odpowiedzi, co kończyłoby nasz kod; podane wymagania funkcjonalne zostały zaimplementowane. :) (Przypomnę: tutaj są opisane -> Przypsianie kilku zmiennym wartości z tablicy). Jeśli będziesz mieć jeszcze pytania, pytaj.
0

Coś nie działa https://jsfiddle.net/5k17ghnw/. I czy mogę usunąć tą tablice arrAnswerVaranty bo i tak nigdzie jej nie wykorzystuje

0
  1. Zapomniałem napisać, że przedostatnie 2 punkty powinny zostać wykonane w funkcji showRandomQuestion (czyli zarówno przypisanie do zmiennej variants, jak i przypisanie do właściwości innerHTML).
  2. Zapomniałem napisać, że zmiennej variants trzeba przypisać wynik wywołania funkcji getRandomVariants z argumentem displayQuestQizIndex.

PS

  1. Jak najbardziej możesz usunąć tablicę arrAnswerVaranty. Okazała się nam nieprzydatna.
1

Tak to powinno wyglądać?https://jsfiddle.net/s6ocqh59/1/

0

Chciałem cie zapytać o ten kod https://jsfiddle.net/gvk5urzs/5/. Bo chce napisać pewną fukcjonalność że jeżeli użytkownik mi nie zaznaczy żadnej odpowiedzi to nie pozwalam mu przejść do następnego pytania. Po zaznaczeniu przechodzi dalej. Ja napisałem tylko taki poglądowy kod na temat jak ja to widze. Wiem że to jest jedna z prostszych funkcjonalności w tej aplikacji ale dla mnie każda linijka kodu jest niezwykle ważna nawet jeżeli wydaje się błacha i chce zapytać po prostu o rade czy taki kod nadaje się do tego co chce zaimplementować czy raczej nie bardzo. Czy byś coś dodał, zmienił badź ewentualnie coś usnął

1
  1. Jeśli chodzi o kod HTML, to widzę, że opuściłeś znaczniki <body> oraz </body>. Co prawda zgodnie z dokumentacją MDN jest to dopuszczalne (https://developer.mozilla.org/en-US/docs/Web/HTML/Element/body), ale myślę, że mógłbyś rozważyć, czy jednak nie pisać tych znaczników – dla czytelności.
  2. Jeśli chodzi o kod JavaScript, to kilka rzeczy:
    2.1. @szatkus wspomniał w komentarzu o zawężeniu selektora w wywołaniu metody document.querySelector do input[type="radio"]. Mógłby być zawężony; moim zdaniem jeszcze lepiej pobierać po klasie albo po ID. Niemniej w tym kodzie nie ma to znaczenia i rozumiem, że zrobiłeś tak dla prostoty kodu.
    2.2. @szatkus wspomniał w komentarzu o rozróżnieniu między metodami document.querySelector, a document.querySelectorAll. Ta pierwsza metoda pobiera pierwszy dopasowany element, ta druga pobiera wszystkie. W tym kodzie nie ma znaczenia, której użyjesz; ale ogólnie pamiętaj, że pobieranych elementów może być więcej niż jeden, a wtedy trzeba będzie użyć tej drugiej metody.
    2.3. Dla czytelności zmieniłbym nazwę zmiennej inputForm na input. Słowo "form" jest dla mnie zbyt ogólne, a poza tym samo słowo "input" pasuje do użytego selektora (którym jest właśnie input). W szczególności może się kiedyś zdarzyć, że będziesz mieć na stronie kilka formularzy, a w każdym z nich kilka elementów INPUT, i w takiej sytuacji być może każdy element trzeba będzie nazwać inaczej. Moim zdaniem nawet w tak prostym kodzie warto zawsze zmienne nazywać jak najbardziej czytelnie.
    2.4. Dla czytelności zmieniłbym nazwę funkcji checkValidate na validateIfChecked. W pierwszym przypadku można przeznaczenie funkcji odczytywać: "funkcja ma sprawdzać jakieś 'validate'", a w drugim: "funkcja ma walidować, czy coś jest 'checked'". A Tobie, jak myślę, chodzi o to drugie znaczenie.
0

Jaki jest problem że nie działa https://jsfiddle.net/16kpq7fu/? W złym miejscu daje return true i false?

1 użytkowników online, w tym zalogowanych: 0, gości: 0, botów: 1

Robot: CCBot