Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [CSS][JavaScript]Liczenie w czasie rzeczywistym z input'a
Forum PHP.pl > Forum > Przedszkole
BienuSS
Witam.
W jaki sposób moge zrobić żeby liczba wpisywana w inpucie była w czasie rzeczywistym mnożona przez daną liczbe i wynik z działania zmieniający się w divie
SmokAnalog
Na przykład tak:

[JAVASCRIPT] pobierz, plaintext
  1. document.getElementById('id-twojego-inputa').addEventListener('input', e => {
  2. document.getElementById('id-twojego-diva').innerHTML = e.target.value * 123;
  3. });
[JAVASCRIPT] pobierz, plaintext
BienuSS
Niestety nie działa
SmokAnalog
Wstawiłeś skrypt na końcu? Pokaż cały HTML.
BienuSS
OK, działa ja musze mieć coś w html zepsute bo wrzuciłem to do jsfiddle i działa, Dzięki!

Natomiast u mnie w pliku nie działa, mam cos takiego:
Kod
<html>
<head>
    <script src="//code.jquery.com/jquery-3.2.1.min.js"></script>
</head>
<body>



<input type="text" id="loo">
<div id="elo">Total</div>

<script type="javascript/text">
    document.getElementById('loo').addEventListener('input', e => {
    document.getElementById('elo').innerHTML = e.target.value * 123;
});
</script>
</body>
</html>


EDIT:
mój błąd zamiast:
Kod
<script type="javascript/text">
    document.getElementById('loo').addEventListener('input', e => {
    document.getElementById('elo').innerHTML = e.target.value * 123;
});
</script>


trzeba dać

Kod
<script>
    document.getElementById('loo').addEventListener('input', e => {
    document.getElementById('elo').innerHTML = e.target.value * 123;
});
</script>
SmokAnalog
Type to jak już text/javascript, a nie javascript/text smile.gif Ale możesz śmiało pominąć ten atrybut.
BienuSS
A w przypadku gdy mam kilka takich formularzy tj.:
  1. <input type="text" class="value_coins">
  2. <div class="elo">Total</div><br>
  3. <input type="text" class="value_coins">
  4. <div class="elo">Total</div>


to bawić się funkcją closest() ?
SmokAnalog
Masz mnóstwo możliwości. Ja bym poszedł albo we wspólnego rodzica, albo w coś bardziej elastycznego:

  1. <input type="text" data-binding="foo">
  2. <div id="foo"></div>
  3.  
  4. <input type="text" data-binding="bar">
  5. <div id="bar"></div>


[JAVASCRIPT] pobierz, plaintext
  1. document.querySelectorAll('[data-binding]').forEach(input => {
  2. input.addEventListener('input', event => {
  3. document.getElementById(event.target.dataset.binding).innerHTML = event.target.value;
  4. });
  5. });
[JAVASCRIPT] pobierz, plaintext


To oczywiście wszystko w waniliowym JavaScripcie, jak chcesz to zrób sobie w jQuery, ale w dzisiejszych czasach warto rozważyć rezygnację z jQuery.
BienuSS
Mam coś takiego:
  1. <div>
  2. <input type="text" data-binding="foo">
  3. <div id="foo"></div>
  4. <span>2.5</span>
  5. </div>


a tu js

Kod
document.querySelectorAll('[data-binding]').forEach(input => {

    input.addEventListener('input', event => {
        document.getElementById(event.target.dataset.binding).innerHTML = "<b>Razem: "+Math.round((event.target.value*xxxxxxx))+"</b>";
    });
});


https://jsfiddle.net/u4fz0vhb/34/

i zamiast xxxxxx potrzebuje wstawić wartość z spana, próbowałem closest(), getElementByiD, i jak narazie 0 pomysłów, jak by ktoś dał rade podać mi polecenie do którego powinienem sie odwołać, nie chce gotowego kodu, a pomysłu jak by to zrobić, z góry dzięki!
SmokAnalog
Czy takie zachowanie z mnożeniem będzie występowało wiele razy na stronie? Pytam, bo zastanawiam się czy warto tak starać się robić elegancki HTML czy może lepiej robić osobne callbacki.
BienuSS
Na stronie jesli uzytkownik bedzie chciał wpisać w kazde pole coś to koło 100 razy
SmokAnalog
A opisz dokładniej ten projekt, co dokładnie to ma robić?
BienuSS
Użytkownik wpisuje jakąś cyfre w inpucie, ona jest mnożona przez zmienną pobraną z bazydanych i wyświetlana w divie pod inputem w którym wpisywaliśmy cyfrę
SmokAnalog
Każdy input ma ten mnożnik obok?
BienuSS
tak ale jest ukryty teraz dałem to tak:
  1.  
  2. <div>
  3. <input type="text" data-binding="bar">
  4. <div id="bar"></div>
  5. <input type='hidden' id='bar-mnoznik' value="$zmienna" />
  6. </div>
  7.  
SmokAnalog
Musiałbyś dużo konkretniej opowiedzieć co robisz, żebym Ci doradził jakieś fajne rozwiązanie. Nie wiem czy ten mnożnik gdzieś zapisujesz czy nie. Opowiedz po prostu szczegółowo o projekcie. Nie mów mi o divach i inputach, tylko jak chłop krowie na rowie - co to jest i co ma robić.
BienuSS
Jest to jakby demo obstawiania meczy, uzytkownik dostaje na start 100000 punktów i moze nimi obstawiac, kursy są tworzone tak że pobieraz sie z bazydanych ilosc punktów na druzyne a, drużyne b i zapisuje sie do zmiennej. Użytkownik wpisuje ile chce postawic coinsów na daną drużyne i mnoży mu razy dany kurs
SmokAnalog
To może lepiej zapisuj mnożnik bezpośrednio w inpucie i po wspólnym rodzicu szukaj odpowiedniego diva? Nie ma sensu w takim razie ten mój pomysł z data-bind, bo musiałbyś na siłę nadawać nazwy. Lepiej coś na kształt:

  1. <div>
  2. <input type="text" data-multiplier="2.5">
  3. <div class="bar"></div>
  4. </div>


[JAVASCRIPT] pobierz, plaintext
  1. document.querySelectorAll('[data-multiplier]').forEach(input => {
  2. input.addEventListener('input', event => {
  3. event.target.parentNode.querySelector('.bar').innerHTML = event.target.value * event.target.dataset.multiplier;
  4. });
  5. });
[JAVASCRIPT] pobierz, plaintext
BienuSS
Dziękuje exclamation.gif Dokładnie o to chodziło
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.