Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JQ] Prosty kalkulator
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
pietrov8
Witam.

Mam taki mały kalkulator składający się z 4 elementów. Dwóch inputów których wartości są aktualizowane na zasadzie slidera z jQuery UI oraz dwóch inputów typu radio zależnych od siebie.

Poniżej przedstawiam szkielet jak to ma wyglądać:
http://jsfiddle.net/qWfdB/6/

Działanie jest banalne lecz nie wiem jak zatkualizować zmienne "na żywo".
Opiszę po krótce o co chodzi.
Mamy dwa inputy których wartość jest aktualizowana poprzez suwaki z jQuery UI. Ich wartości zmieniają się po stronie użytkownika. Chciałbym także by zmienne zawierające wartości tych inputów zmieniały się bez musu odświeżania strony. Tutaj najprawdopodobniej będę musiał zastosować funkcję bind(). Lecz prosiłbym o wskazówki.

Mamy również dwa inputy radio. Tutaj chciałbym by zmienna zawierała wartość inputu który jest aktualnie zaznaczony czyli którego atrybut checked jest checked. Najprawdopodobniej dla radio trzeba będzie zastosować funkcję click() jeżeli się nie mylę.

Wszystko ma się aktualizować po stronie użytkownika bez odświeżania strony.

Z góry dziękuję za wszelkie wskazówki i porady.

Pozdrawiam
Dominator
Użyj setInterval do aktualizowania "na żywo".
grzes999
Cytat(Dominator @ 1.09.2012, 11:00:20 ) *
Użyj setInterval do aktualizowania "na żywo".

A do czego on mu tutaj.
http://jsfiddle.net/qWfdB/12/
ethann
  1. <!DOCTYPE html>
  2.  
  3. <meta charset="utf-8" />
  4.  
  5. <link rel="stylesheet" type="text/css" href="http://jqueryui.com/themes/base/jquery.ui.all.css" />
  6. <script src="http://code.jquery.com/jquery-1.8.1.min.js"></script>
  7. <script src="http://jqueryui.com/ui/jquery.ui.core.js"></script>
  8. <script src="http://jqueryui.com/ui/jquery.ui.widget.js"></script>
  9. <script src="http://jqueryui.com/ui/jquery.ui.mouse.js"></script>
  10. <script src="http://jqueryui.com/ui/jquery.ui.slider.js"></script>
  11. function updateValue() {
  12. var value1 = $( "#slider1" ).slider( "option", "value" );
  13. var value2 = $( "#slider2" ).slider( "option", "value" );
  14.  
  15. var opcja = $( "input[type=radio][name=opcja]:checked" ).val();
  16.  
  17. var wynik = (value1 + value2) * opcja;
  18. $("span.wynik").text(wynik);
  19.  
  20. }
  21. $(function() {
  22. $( "#slider1" ).slider({
  23. value:100,
  24. min: 0,
  25. max: 500,
  26. step: 1,
  27. slide: updateValue,
  28. change: updateValue
  29. });
  30.  
  31. $( "#slider2" ).slider({
  32. value:100,
  33. min: 0,
  34. max: 500,
  35. step: 1,
  36. slide: updateValue,
  37. change: updateValue
  38. });
  39.  
  40. $( "input[type=radio][name=opcja]" ).change(updateValue);
  41.  
  42. updateValue();
  43. });
  44. </script>
  45.  
  46.  
  47. <div id="slider1" style="width:200px;"></div><br /><br />
  48. <div id="slider2" style="width:200px;"></div>
  49.  
  50. <input type="radio" name="opcja" id="opcja1" value="100" checked="checked">
  51. <label for="opcja1">Opcja 1</label><br />
  52.  
  53. <input type="radio" name="opcja" id="opcja2" value="10">
  54. <label for="opcja2">Opcja 2</label><br />
  55.  
  56. <span class="wynik"></span>
  57.  
  58. </body></html>
pietrov8
Kod
    $(function() {
        var input = $('input:checked').val();    
        $('.nr3').val(5*12*input);
        $( ".stanowiska" ).slider({
            range: "min",
            value:14,
            min: 1,
            max: 12,
            step: 1,
            slide: function( event, ui ) {
                $("#amount1").val(ui.value);
                var cena1 = $('#amount').val();
                var cena2 = $('#amount1').val();
                var input = $('input:checked').val();
                $('.nr3').val(+ cena1 * +cena2);
                var cena = input * $('.nr3').val();
                $('.nr3').val(cena);
            }
        });
        $( "#amount1" ).val($( ".stanowiska" ).slider( "value" ) );
    });
    // slider 2
    $(function() {
        var input = $('input:checked').val()
        $('.nr3').val(5*12*input)
        $( ".abonament" ).slider({
            range: "min",
            value:5,
            min: 1,
            max: 12,
            step: 1,
            slide: function( event, ui ) {
                $("#amount").val(ui.value);
                var cena1 = $('#amount').val();
                var cena2 = $('#amount1').val();
                $('.nr3').val(+ cena1 * +cena2);
                var input = $('input:checked').val()
                var cena = input * $('.nr3').val();
                $('.nr3').val(cena);
            }
        });
        $( "#amount" ).val( $( ".abonament" ).slider( "value" ) );

        
    });
            <div class="sowaki">
                <div class="stanowisko_box">
                    <label for="amount">Liczba stanowisk:</label>
                    <input type="text" id="amount1" />
                    <div class="stanowiska"></div>
                </div>
                <div class="orientacyjna">
                    <h5>Orientacyjna cena</h5>
                    <p><input type="text" class="nr3"></span> pln netto</p>
                </div>
                <div class="abonament_box">
                    <label for="amount">Okres abonamentu:</label>
                    <input type="text" id="amount" />
                    <div class="abonament"></div>
                </div>
            </div>


Działa jak należy tylko że zmiana ceny poprzez input radio następuje tylko gdy przesuniemy suwak. Co mam zmienić by tak nie było?
ethann
W sumie podałem Ci gotowy przykład, wystarczyłoby go zmodyfikować/wyciągnąć odpowiednie dane.

[JAVASCRIPT] pobierz, plaintext
  1. $("input[type=radio][name=opcja]").change(function(){
  2. // funkcja która wykona się przy zmianie inputu radio
  3. });
[JAVASCRIPT] pobierz, plaintext


Zauważ, że te same inputy muszą mieć tą samą nazwę w tym przypadku. np.
<input type="radio" name="opcja" value="10" />
<input type="radio" name="opcja" value="15" />
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.