Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JavaScript] wynik na jednej stronie
Forum PHP.pl > Forum > Przedszkole
gosienkami
Czy moze mi ktoś wytłumaczyć i napisać kod ktory na jednym formularzu po wpisaniu do jednego pola ceny w 2 obok wyswietli cene brutto
#luq
Sprawdzasz czy w pierwszym okienku zakończono pisać i w tym momencie edytowane jest value drugiego okienka tak że jest to value pierwszego * 1.20 (czy tak jaki procent)
Spawnm
proszę:
  1. <script language='javascript'>
  2. function vat(){
  3. normal=document.getElementById('lol').value;
  4.  
  5. wat=normal*1.22;
  6. w=document.getElementById('wat').innerHTML=wat;
  7. }
  8. <input type='text' id='lol'>
  9. <input type='button' value='licz' onclick='vat()'>
  10. <div id='wat'>0</div>
  11. </body>
  12. </html>

//edit
#luq-> rzeczywiście przekombinowałem tongue.gif
leci poprawka
#luq
Cytat(Spawnm @ 13.02.2009, 15:19:09 ) *
wat=normal*1+normal*22/100;

questionmark.gif
Oczywiście można dodać jeszcze wiele innych działań, ale chyba lepiej
Kod
brutto = neto * podatek
24.4 = 20 * 1.22
gosienkami
mam tak bład ze obiekt nie obsługuje tej metody, i chodzi mi o wyswietlenie ceny z vat w polu obok bez klikania w buton
Cytat(Spawnm @ 13.02.2009, 15:19:09 ) *
proszę:
  1. <script language='javascript'>
  2. function vat(){
  3. normal=document.getElementById('lol').value;
  4.  
  5. wat=normal*1.22;
  6. w=document.getElementById('wat').innerHTML=wat;
  7. }
  8. <input type='text' id='lol'>
  9. <input type='button' value='licz' onclick='vat()'>
  10. <div id='wat'>0</div>
  11. </body>
  12. </html>

//edit
#luq-> rzeczywiście przekombinowałem tongue.gif
leci poprawka
#luq
onblur event na polu z ceną brutto zamiast onclick na przycisku (którego można wywalić)
Przykładzik jeśli chcesz: http://www.w3schools.com/jsref/jsref_onblur.asp
gosienkami
tylko to ma sie wyswietlać w polu obok bo i zeby dane zostały w polu bo to bedzie formularz z kilkoma cenami
Cytat(#luq @ 13.02.2009, 15:33:23 ) *
onblur event na polu z ceną brutto zamiast onclick na przycisku (którego można wywalić)
Przykładzik jeśli chcesz: http://www.w3schools.com/jsref/jsref_onblur.asp
#luq
Ja dałem przykład jak działa zdarzenie onblur winksmiley.jpg
Widzę, że trzeba łopatologicznie.

  1. <script type="text/javascript">
  2. function vat( linkId, targetId ){
  3. var l = document.getElementById( linkId );
  4. var t = document.getElementById( targetId );
  5.  
  6. t.value = l.value * 1.22;
  7. }
  8.  
  9. document.getElementById('netto').onblur = function(){ vat( 'netto' ,'brutto') };


  1. <input type="text" name="netto" />
  2. <input type="text" name="brutto" />


Pisane na kolanie.
BaN
Poniżej moja propozycja z jedną uwagą: prawidłowy zapis liczby po polsku to przecinek zamiast kropki, w kodzie jest to uwzględniane
Kod
<script type="text/javascript">

/*
* wyznacza cenę brutto na podstawie ceny netto wpisanej do pola formularza
* param e HTMLInputElement element formularza z ceną netto
* return none
*/
function oblicz_brutto(e) {
  // standardowa liczbowa wartość VAT 22%
  var vat = 0.22
  // wyznaczenie wartości pola cena_netto z zamianą na liczbę rzeczywistą
  var cena = parseFloat(e.value.replace(',', '.'))
  if (isNaN(cena) || (cena < 0)) { // nie udało się zamienić na liczbę lub nieprawidłowa cena
    // pusty napis w polu cena_brutto
    e.form.cena_brutto.value = ''
    // wyświetlanie komunikatu i umieszczenie focusa w polu z ceną netto
    alert('Proszę wpisać prawidłową liczbę')
    e.focus()
  }
  else { // cena prawidłowa
    // obliczenie ceny brutto w groszach
    cena = new String(Math.round(cena * 100 * (1 + vat)))
    var dlugosc = cena.length
    // zamiana na cenę z przecinkiem przed groszami
    switch (dlugosc) {
      case 1:
        cena = '0,0' + cena
        break
      case 2:
        cena = '0,' + cena
        break
      default:
        cena = cena.substring(0, dlugosc - 2) + ',' + cena.substring(dlugosc - 2)
    }
    e.form.cena_brutto.value = cena
  }
}
</script>
<form>
<!-- dodanie zdarzenia onblur na polu z ceną netto, zdarzenie następuje, gdy element straci focus -->
<p>Cena netto: <input type="text" name="cena_netto" onblur="oblicz_brutto(this)" /><br />
Cena brutto: <input type="text" name="cena_brutto" readonly="readonly" /></p>
</form>
gosienkami
własnie o to mi chodziło z tym,ze chce zeby cena brutto pojawiała sie jednoczesnie przy wpisywaniu ceny netto bo teraz musze gdzies kliknac
[quote name='BaN' post='570977' date='13.02.2009, 16:46:58 ']Poniżej moja propozycja z jedną uwagą: prawidłowy zapis liczby po polsku to przecinek zamiast kropki, w kodzie jest to uwzględniane
[
#luq
W takim wypadku użyj zdarzenia onkeypress.
Jeśli chcesz użyć tego co ja napisałem, to zamień
Kod
document.getElementById('netto').onblur = function(){ vat( 'netto' ,'brutto') };

na:
Kod
document.getElementById('netto').onkeypress = function(){ vat( 'netto' ,'brutto') };
webdice
  1. var calc = function (obj)
  2. {
  3. if (obj.value != '')
  4. {
  5. document.getElementById ('brutto').innerHTML = (parseFloat (obj.value) * parseFloat (0.22)) + parseFloat (obj.value);
  6. }
  7. else
  8. {
  9. document.getElementById ('brutto').innerHTML = 0;
  10. }
  11. }
  12.  
  13. <form action="" method="POST">
  14. <input type="text" onkeyup="calc (this);" /><div id="brutto">0</div>
  15. </form>
BaN
Poniżej zmieniony kod, uwzlędnia, że pól może być więcej, nie wyświetla komunikatu jako alert, tylko w polu z ceną brutto wpisuje błąd, ale pole z ceną brutto musi być bezpośrednio po polu z ceną netto
Kod
<script type="text/javascript">
// zmienna, która zabezpieczy przed wielokrotnym wywoływaniem funkcji obliczającej cenę brutto
var trwaja_obliczenia = false

/*
* wyznacza i wpisuje do pola formularza cenę brutto na podstawie ceny netto wpisanej do pola formularza
* uwaga:
* pole z ceną brutto musi być umieszczone w kodzie bezpośrednio po polu z ceną netto
* między tymi polami nie może być innego pola formularza
*
* param e HTMLInputElement element formularza z ceną netto
* return none
*/
function oblicz_brutto(e) {
  if (!trwaja_obliczenia) {
    trwaja_obliczenia = true
    var i, n, fe = e.form.elements, cena_brutto = null
    // wyznaczenie pola z ceną brutto
    for(i = 0, n = fe.length; i < n; ++i) {
      if ((fe[i] == e) && (i < n - 1)) {
        cena_brutto = fe[i + 1] // pole z ceną brutto jest następne po polu z ceną netto
      }
    }
    if ((cena_brutto == null) || (cena_brutto.type != 'text')) {
      alert('Nieprawidłowa budowa formularza. Brak pola na cenę brutto')
    }
    else {
      // standardowa liczbowa wartość VAT 22%
      var vat = 0.22
      // wyznaczenie wartości pola cena_netto z zamianą na liczbę rzeczywistą
      var cena = parseFloat(e.value.replace(',', '.'))
      if (isNaN(cena) || (cena < 0)) { // nie udało się zamienić na liczbę lub nieprawidłowa cena
        // pusty napis w polu cena_brutto
        cena_brutto.value = 'błąd'
        cena_brutto.style.color = 'red'
        // wyświetlanie komunikatu i umieszczenie focusa w polu z ceną netto
    e.focus()
      }
      else { // cena prawidłowa
        cena_brutto.style.color = 'green'
        // obliczenie ceny brutto w groszach
        cena = new String(Math.round(cena * 100 * (1 + vat)))
        var dlugosc = cena.length
        // zamiana na cenę z przecinkiem przed groszami
        switch (dlugosc) {
          case 1:
            cena = '0,0' + cena
            break
          case 2:
            cena = '0,' + cena
            break
          default:
            cena = cena.substring(0, dlugosc - 2) + ',' + cena.substring(dlugosc - 2)
        }
        cena_brutto.value = cena
      }
    }
    trwaja_obliczenia = false
  }
}

</script>
<form>
<p>Cena netto 1: <input type="text" name="cena_netto1" onkeyup="oblicz_brutto(this)"  onblur="oblicz_brutto(this)" /><br />
Cena brutto 1: <input type="text" name="cena_brutto1" readonly="readonly" /></p>

<p>Cena netto 2: <input type="text" name="cena_netto2" onkeyup="oblicz_brutto(this)"  onblur="oblicz_brutto(this)" /><br />
Cena brutto 2: <input type="text" name="cena_brutto2" readonly="readonly" /></p>

<p>Cena netto 3: <input type="text" name="cena_netto3" onkeyup="oblicz_brutto(this)"  onblur="oblicz_brutto(this)" /><br />
Cena brutto 3: <input type="text" name="cena_brutto3" readonly="readonly" /></p>
</form>
gosienkami
mam jeszcze cos takiego, cała nowa cena, ktora sie wyswietlała po przeładowaniu stronki, a chce zmienic zeby sie wyswietlała na jednym formularzu-tak jak cena brutto w powyzszym poscie. Z tym ze cena zelezna jest od wielu zwyzek i znizek ktore są uwzgledniane jezeli ktos wybierze, po wcisnieciu przycisku radio lub wybraniu z pola select (w przypadku rat i kart).i teraz nie wiem jak do tego podpiąć js.
  1. <?
  2. $znizka1=0;
  3. $znizka2=0;
  4. $znizka3=0;
  5. $znizka4=0;
  6. $znizka5=0;
  7. $znizka6=0;
  8. $znizka7=0;
  9. $znizka8=0;
  10. $znizka9=0;
  11.  
  12.  
  13. $stawka3=0.20;
  14. $skladka3=$suma3*(1+$stawka3/100)-$suma3;//skladka podstawowa
  15.        
  16. //zwyzki 1
  17. if(isset($_POST["zwyzka2"])){
  18. if($_POST["zwyzka2"]=="11") $zwyzka2 = 20;
  19. $skladka3=$skladka3 *(1+$zwyzka2/100);
  20. }                          
  21. //zwyzki 2
  22. if(isset($_POST["zwyzka"])) {
  23. if($_POST["zwyzka"] == "10") $zwyzka = 15;
  24. $skladka3=$skladka3 *(1+ $zwyzka/100);
  25. }        
  26.                  
  27. //-30
  28. if(isset($_POST["znizka1"])){
  29. if($_POST["znizka1"]=="1") $znizka1 = 30;
  30. $skladka3=$skladka3*(1-$znizka1/100);}
  31.  
  32. // -30%
  33. if(isset($_POST["znizka2"])){
  34. if($_POST["znizka2"]=="2") $znizka2 = 30;
  35. $skladka3=$skladka3*(1-$znizka2/100);}
  36. ....
  37. // -5%
  38. if(isset($_POST["znizka9"])){
  39. if($_POST["znizka9"] == "9") $znizka9 = 5;
  40. $skladka3=$skladka3*(1-$znizka9/100);
  41. }
  42.         //::znizki z pola select
  43.         if($lata=='1'||$lata=='2')
  44.         $lata=10;
  45.         elseif($lata=='3')
  46.         $lata=15;
  47.         elseif($lata=='4')
  48.         $lata=20;
  49.         else
  50.         echo '';
  51.         $skladka3=$skladka3*(1-$lata/100);
  52.          
  53.         //::raty
  54.         if($raty == 'r2')
  55.         $raty = 5;
  56.         elseif($raty == 'r3')
  57.         $raty = 10;
  58.         else
  59.         echo '';
  60.         $skladka3=$skladka3*(1+$raty/100);
  61.        
  62.         //::karta
  63.         $karta=$_POST['karta'];
  64.         if($karta=='k1')
  65.         $karta=5;
  66.         elseif($karta=='k2')
  67.         $karta=25;
  68.         else
  69.         echo'';
  70.         $skladka3=$skladka3*(1-$karta/100);
  71.         echo round($skladka3).' zł.';    
  72. ?>
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.