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

Obliczanie wartości w zależności od dwóch wartości w formularzu

Object Storage Arubacloud
+1 głos
292 wizyt
pytanie zadane 18 kwietnia 2022 w JavaScript przez Piotr Popławski Użytkownik (610 p.)

Dzień dobry

proszę o pomoc zwłaszcza tych co ogarniają JS, mi do Was bardzo daleko. Naczytałem się i nadal nie wiem jak to ogarnąć

Mam taki formularz

<form id="testInput">
<div>
  <input type="radio" id="okres" name="okres" value="1" >
  <label for="huey">Huey</label>

  <input type="radio" id="okres" name="okres" value="2" >
  <label for="dewey">Dewey</label>

  <input type="radio" id="okres" name="okres" value="3" >
  <label for="louie">Louie</label>
</div>

    <label for="start">Start date:</label>
<?php echo date("Y-m-d"); ?>
    <input type="date" id="start" name="start"
           value="<?php date('Y-m-d'); ?>"
           min="<?php date("Y-m-d"); ?>" max="2022-04-31"
>

</div>
</form>
<div id="efekt">55</div>

Chodzi o następujący efekt działania:

zaznaczenie  lub zmiana pola "okres" powoduje pobranie wartości wybranego pola (tu w zakresie od 1 do 3)

następnie sprawdzenie czy pole "start" jest określone (wybrana data) czy nie. Jeśli nie to nic się nie dzieje, jeśli jest określona, wówczas do wybranej daty dodaję wybraną wartość pola "okres"

to samo się dzieje w przypadku wyboru, określenia daty w polu "start". Sprawdzenie czy jest wybrana wartość "Okres", jeśli nie to nic się nie dzieje, jeśli jest wybrana, wówczas następuje zwiększenie daty o wybraną wartość pola "okres".

W obu przypadkach chodzi o wyświetlenie daty w div ID=efekt

Już dziękuje za pomoc, nie raz dzięki Wam znalazłem rozwiązanie.

 

 

komentarz 19 kwietnia 2022 przez VBService Ekspert (253,340 p.)
edycja 19 kwietnia 2022 przez VBService

BTW, w liniach 16 i 17 brakuje polecenia echo.

<form id="testInput">
<div>
  <input type="radio" id="okres" name="okres" value="1" >
  <label for="huey">Huey</label>
 
  <input type="radio" id="okres" name="okres" value="2" >
  <label for="dewey">Dewey</label>
 
  <input type="radio" id="okres" name="okres" value="3" >
  <label for="louie">Louie</label>
</div>
 
    <label for="start">Start date:</label>
<?php echo date("Y-m-d"); ?>
    <input type="date" id="start" name="start"
           value="<?php echo date('Y-m-d'); ?>"
           min="<?php echo date("Y-m-d"); ?>" max="2022-04-31"
>
 
</div>
</form>
<div id="efekt">55</div>

no i w linii 20 masz div-a "domykającego" (</div>)  bez podanego wcześniej "otwierającego" (<div>)

 

czy nie chodziło Tobie czasem o taki zapis?

<form id="testInput">
  <div>
    <input type="radio" id="okres" name="okres" value="1" >
    <label for="huey">Huey</label>
 
    <input type="radio" id="okres" name="okres" value="2" >
    <label for="dewey">Dewey</label>
 
    <input type="radio" id="okres" name="okres" value="3" >
    <label for="louie">Louie</label>
  </div>
  
  <div>
    <label for="start">Start date: <?php echo date('Y-m-d'); ?></label>
    <input type="date" id="start" name="start"
         value="<?php echo date('Y-m-d'); ?>"
         min="<?php echo date('Y-m-d'); ?>" max="2022-04-31"
    > 
  </div>
</form>
<div id="efekt">55</div>

 

skoro w min="<?php echo date("Y-m-d"); ?>" ustalasz datę z poziomu php-a to raczej dobrze by było ustawić też max="2022-04-31" z poziomu php-a a nie "ręcznie"

przykład

  <div>
    <label for="start">Start date: <?php echo date('Y-m-d'); ?></label>
    <input type="date" id="start" name="start"
           value="<?php echo date('Y-m-d'); ?>"
           min="<?php echo date('Y-m-d'); ?>" 
           max="<?php echo date('Y-m-d', strtotime(date('Y-m-d').'+ 1 week')); ?>"
    > 
  </div>

 

[ UPDATE ]

żeby atrybut for elementu label spełnił swoje zadanie to id wybranego elementu input, muszą "wskazywać" na tę samą nazwę, np.

<input type="radio" id="huey" name="okres" value="1" >
<label for="huey">Huey</label>

 

komentarz 19 kwietnia 2022 przez Piotr Popławski Użytkownik (610 p.)
Dzięki bardzo za podpowiedzi, ten kod był bardzo roboczy i masz rację, że nie do końca dopracowany.

Chodzi szczególnie o cel całości czyli to wszystko co jest po stronie JS

1 odpowiedź

+1 głos
odpowiedź 19 kwietnia 2022 przez VBService Ekspert (253,340 p.)

W przykładzie "skorzystałem" z Event Delegation ( [ 1 ]  [ 2 ] )

 

dla przykładowego kodu php

<form id="testInput">
  <div>
    <input type="radio" id="huey" name="okres" value="1">
    <label for="huey">Huey</label>

    <input type="radio" id="dewey" name="okres" value="2">
    <label for="dewey">Dewey</label>

    <input type="radio" id="louie" name="okres" value="3">
    <label for="louie">Louie</label>
  </div>

  <div>
    <label for="start">Start date: <?php echo date('Y-m-d'); ?></label>
    <input type="date" id="start" name="start"
           value="<?php echo date('Y-m-d'); ?>"
           min="<?php echo date('Y-m-d'); ?>"
           max="<?php echo date('Y-m-d', strtotime(date('Y-m-d').'+ 1 week')); ?>"
    > 
  </div>
</form>
<div id="efekt">0</div>

 

otrzymujemy np. taki kod html

<form id="testInput">
  <div>
    <input type="radio" id="huey" name="okres" value="1" >
    <label for="huey">Huey</label>

    <input type="radio" id="dewey" name="okres" value="2" >
    <label for="dewey">Dewey</label>

    <input type="radio" id="louie" name="okres" value="3" >
    <label for="louie">Louie</label>
  </div>

  <div>
    <label for="start">Start date: 2022-04-19</label>
    <input type="date" id="start" name="start"
           value="2022-04-19"
           min="2022-04-19"
           max="2022-04-26"
    > 
  </div>
</form>
<div id="efekt">0</div>

 

i propozycja

window.onload = load;

function load() {
  const form = document.querySelector('form'),
        datepicker = form.querySelector('[type="date"][name="start"]'),
        efekt = document.querySelector('#efekt');

  form.addEventListener('click', checkPeriod);
  datepicker.addEventListener('change', checkPeriod);

  function checkPeriod(e) {
    if (e.target.nodeName == 'INPUT') {
      const radio_value = form.querySelector('[type="radio"][name="okres"]:checked') || null;
      if (radio_value) {
        const date = new Date(datepicker.value);
        date.setDate(date.getDate() + parseInt(radio_value.value));
        efekt.textContent = date.getFullYear() + '-'
          + ("0" + (date.getMonth() + 1)).slice(-2) + '-'
          + ("0" + date.getDate()).slice(-2);
      }
    }
  }
}

 

1
komentarz 20 kwietnia 2022 przez Piotr Popławski Użytkownik (610 p.)

Rewelacja, dziękuję bardzo za pomoc. yes

Podobne pytania

0 głosów
1 odpowiedź 165 wizyt
0 głosów
1 odpowiedź 314 wizyt
pytanie zadane 21 grudnia 2019 w PHP przez milogab2004 Początkujący (440 p.)
0 głosów
2 odpowiedzi 1,346 wizyt
pytanie zadane 26 lutego 2018 w JavaScript przez hiper007 Stary wyjadacz (11,270 p.)

92,575 zapytań

141,424 odpowiedzi

319,649 komentarzy

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

...