Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JavaScript]Przekazanie wartości zmiennej po za funkcję.
Forum PHP.pl > Forum > Przedszkole
fiasko
Póki co nikt mi nie pomógł


Mam problem z przekazaniem dalej wartości funkcji laduj, które to trafiają do dwóch pól o identyfikatorach data_min i data_max. Po wybraniu opcji w select dane ładują się do tych inputów . Następnie powinny trafić do zmiennej data_s . Czemu mi to nie działa ?

Kod
  <script type="text/javascript">    
        
      
data_s = document.forms["kontener"].elements["data_max"].value;
if (data_s !=  null ){
alert("data s się załadowała");

}

    </script>






Kod
</form>
</div>
<form id="kontener" action="<?$_SERVER[PHP_SELF]?>" method="post">
<input type="text" id="data_min" name="data_min" value=""/>
<input type="text" id="data_max" name="data_max" value=""/>
</form>



<form action="<?$_SERVER[PHP_SELF]?>" method="post">
<select id="btn2" name="dane1" onChange="loaduj( '2011, 01, 01', '2011, 01, 31');">
<option value="10">10</option>
<option value="20">20</option>
<option value="30">30</option>
</select>

</form>


<script type="text/javascript">

function loaduj(data_min , data_max){

document.forms["kontener"].elements["data_min"].value = data_min;
document.forms["kontener"].elements["data_max"].value = data_max;
}
</script>
osl
Ten pierwszy kawałek kodu masz w jakiejś funkcji? Tak na chłopski rozum, to w funkcji "loaduj" musisz dać znać skryptowi, żeby uwzględnił te dane.
Jeśli masz wstawione to tylko gdzieś w środku strony, ten kod jest wykonywany tylko przy ładowaniu strony, więc wartości tych form są puste.
fiasko
Cytat
Ten pierwszy kawałek kodu masz w jakiejś funkcji?



Tak są w funkcji .


Cytat
Tak na chłopski rozum, to w funkcji "loaduj" musisz dać znać skryptowi, żeby uwzględnił te dane.

Muszę jakoś przekazać jej dane. Ale jak mam to zrobić bo funkcja ładuj wywoływana jest z kilku miejsc :

onchagne - przy wybieraniu .
onload - przy ładowaniu strony.


Dane trafić muszą do tej funkcji:




Kod
<script type="text/javascript">    
        
        
          $(function() {    
var zakres_min = new Date(2011, 0, 1); // tu musze przekazac wartosc pola data_min zamiast tej deklaracji  daty
// najchętniej zrobił bym to tak var zakres_min = $("#data_min").val(); - ale to nie działa (zmienna jest pusta w tym momencie)
var zakres_max = new Date(2011, 12, 0); // tu musze przekazac wartosc pola data_max zamiast tej deklaracji daty
/*

tu kombinowałem z beforeshow - ale też nic z tego
$("#from, #to").datepicker({
   beforeShow: function() { alert("test"); }
}).
*/



var dates = $("#from, #to").datepicker({showOn: 'button', buttonImage: '/seo_poz/function/kalendarz/calendar.gif', buttonImageOnly: true, changeMonth: true,
numberOfMonths: 4, showButtonPanel: true,
onSelect: function ( selectedDate )
                {
                

                
                var option = this.id == "to" ?  "maxDate" : "minDate"  ,
                    instance = $( this ).data( "datepicker" );
                    
             var datka = $.datepicker.parseDate(
                        instance.settings.dateFormat ||
                        $.datepicker._defaults.dateFormat,
                        selectedDate, instance.settings );
                    
            
            
    
   datka_plus_90d  = new Date(datka.getTime() + (92 * 24 * 3600 * 1000 ));
    datka_minus_90d  = new Date(datka.getTime() + (-92 * 24 * 3600 * 1000 ));
    
    
     if(datka_plus_90d >= zakres_max){
             datka_plus_90d = zakres_max;
             }
            
              if(datka_minus_90d <= zakres_min){
             datka_minus_90d = zakres_min;
             }

              
                dates.not( this ).datepicker( "option", option, datka )
                .datepicker( "option", "maxDate", datka_plus_90d).datepicker( "option", "minDate", datka_minus_90d);
            }

            
            
            
            
        }).datepicker( "option", "minDate", zakres_min).datepicker( "option", "maxDate", zakres_max).datepicker( "option", "monthNames", ["styczen", "luty", "marzec", "kwiecie", "maj", "czerwiec", "lipiec", "sierpie", "wrzesi","pazdziernik", "listopad", "grudzien"] ).datepicker( "option", "monthNamesShort", ['sty','lut','mar','kwi','maj','cze','lip','sie','wrze','paz','lis','gru'] ).datepicker( "option", "closeText", 'zamknij' ).datepicker( "option", "dayNamesMin", ['Po', 'Wt', 'sr', 'Cz', 'Pi', 'So', 'Ni'] ).datepicker( "option", "nextText", 'Nastepny' ).datepicker( "option", "prevText", 'Poprzedni' );
        
    $("#link").click(
        function()
        {
          $("#from, #to").datepicker( "refresh" );
            document.getElementById('formularz').reset();
        });



});

    </script>




Jak ktoś zna jakiś sposób na przekazanie tych zmiennych kalendarza to Help.

No nie macie żadnych pomysłów ?


Próbowałem tak : Ale działa tylko wtedy gdy z ręki wpisuje dane w te pole i opuszczam pole.
Kod
$("#data_min").change(
        function()
        {
         zakres_min = $("#data_min").val();
          alert("test"+zakres_min);
        });


Muszę wykryć zmianę tej zmiennej sciana.gif Albo przekazać dane w inny sposób.

arrowheadsmiley.png jakieś podpowiedzi ?

arrowheadsmiley.png
benio101
  1. <script type="text/javascript">
  2. data_s = document.forms["kontener"].elements["data_max"].value;
  3. if (data_s != null ){
  4. alert("data s się załadowała");
  5.  
  6. }
  7. </script>


Przed data_s dodaj takie magiczne słowo
  1. var


a jak nie zadziała, to zamień tą linijke na taką mistyczną:
  1. var data_s = document.getElementById('data_max').value;
fiasko
Cytat
Przed data_s dodaj takie magiczne słowo


Gdyby to było to bym tu na forum o tym nie pisał. Chodzi o to, że zmienna w tym czasie jest pusta bo ładuje ją inna funkcja wywoływana w js.

Nie chodzi tu o deklarację.
benio101
Ty, no podajesz kod bez deklaracji i psioczysz, że Ci każę zadeklarować, no hej!
A
  1. if(document.getElementById('data_max').value!="")alert("data s się załadowała");
działa?
Albo zadeklaruj data_max globalnie, za 1. SCRIPT, tj.
  1. <script(...)>var data_max;
fiasko
Kod
if(document.getElementById('data_max').value!="")alert("data s się załadowała");


coś takiego nie zadziała.

Zmienną mam zadeklarowaną gdzieś indziej - ten kod dałem w uproszeniu, ale masz racje tu zapomniałem zadeklarować tej zmiennej .

Deklaracja globalna też nic nie da.


kod jest oczywiście w uproszeniu bo muszę tak naprawdę przekazać te dane do kalendarza.

Zobacz sam :
Kod
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<meta>




      <script type="text/javascript">    

    if(document.getElementById('data_max').value!=""){
    
    alert("data s się załadowała");
    }
          </script>
    
    
  </head>
</head>
<body>


<form action="<?$_SERVER[PHP_SELF]?>" method="post">
<select id="btn2" name="dane1" onChange="loaduj( '2011, 01, 01', '2011, 01, 31');">
<option value="10">10</option>
<option value="20">20</option>
<option value="30">30</option>
</select>

</form>


<script type="text/javascript">

function loaduj(data_min , data_max){

document.forms["kontener"].elements["data_min"].value = data_min;
document.forms["kontener"].elements["data_max"].value = data_max;
}
</script>

<form id="kontener" action="<?$_SERVER[PHP_SELF]?>" method="post">
<input type="text" id="data_min" name="data_min" value=""/>
<input type="text" id="data_max" name="data_max" value=""/>
</form>

</body>
</html>


W tym czasie jak sprawdzam to pole jest puste. Więc jak ma się pokazać alert ?





Dane są przesyłane asynchronicznie i tu należy szukać rozwiązania.

Cały kod kalendarza widać jak na dłoni . Jak więc mam w nim przeładować asynchronicznie zakres dat ?

każda zmiana onselect lub onload wywołuje funkcję z nowym zakresem dat w zależności od tego w jakiej pozycji jest select . Te dane trafiają w te pola.

Kalendarz ich nie uwzględnia przy uruchamianiu w zakresie dat .

arrowheadsmiley.png

benio101
No ale przecież w tym kodzie nie wywołujesz w ogóle skryptu sprawdzającego. thumbsdownsmileyanim.gif
Zamiast
  1. <script type="text/javascript">
  2.  
  3. if(document.getElementById('data_max').value!=""){
  4.  
  5. alert("data s się załadowała");
  6. }
  7. </script>
daj
  1. <script type="text/javascript">
  2.  
  3. function sprawdz(){ if(document.getElementById('data_max').value!=""){
  4.  
  5. alert("data s się załadowała");
  6. }
  7. } </script>


a zamiast
napisz
  1. <body onload="sprawdz()">
czy kiedy Ty tam zmieniasz te wartości.
fiasko
Ah . Nie wiesz w tym rzecz . U mnie dane są przesyłane asynchronicznie . W momencie wywołania zmiany on change odświeżane są dane przez Ajax. Czyli idzie zapytanie do bazy o nowy zakres dat. Zobacz w kod tu.

Kod
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<meta>




      <script type="text/javascript">    

    $(document).ready(function() {
            $("#btn2").change(function () {
            var zakres_min = '';
            var zakres_max = '';
                  zakres_min = new Date($("#data_min").val());
                zakres_max = new Date($("#data_max").val());
                alert("zakres min "+zakres_min+" ||| zakres max "+zakres_max);


    }).change();
            });
            
          </script>
    
    
  </head>
</head>
<body>


<form action="<?$_SERVER[PHP_SELF]?>" method="post">
<select id="btn2" name="dane1" onChange="loaduj( '2011, 01, 01', '2011, 01, 31');"> /*Tu tak naprawdę nie mam funkcji laduj tylko funkcja zapytaj() ale mniej więcej taki model zachowania trzeba sobie wyobrazić dla funkcji zapytaj.
Po wywolaniu funkcji zapytaj dane zwracane  w ajax i na koniec wywoływana jest funkcja loaduj( 'tu jest zmienna z nową datą', 'tu jest zmienna' z nową datą)  z nowym zkresem dat. Problem w tym , że, zdarzenie wywołuję  w jquery po zmianie opcji select btn2 i idzie ono natychmiast. Zanim dostanę dane to jquery w tym czasie kończy działanie i nic nie otrzymuje.  Gdybym mógł w jquery wykryć zmianę pola input byłoby po sprawie.*/

<option value="10">10</option>
<option value="20">20</option>
<option value="30">30</option>
</select>

</form>


<script type="text/javascript">

function loaduj(data_min , data_max){

document.forms["kontener"].elements["data_min"].value = data_min;
document.forms["kontener"].elements["data_max"].value = data_max;
}
</script>

<form id="kontener" action="<?$_SERVER[PHP_SELF]?>" method="post">
<input type="text" id="data_min" name="data_min" value=""/>
<input type="text" id="data_max" name="data_max" value=""/>
</form>

</body>
</html>
benio101
ojojoj... no to wybacz, ale niestety muszę na tym etapie załamać ręce: nie znam Ajaxa wstydnis.gif

A jakbyś skopiował wartości do ukrytego inputa (input type="hidden")?
fiasko
Chętnie - No a jak wykryję zmianę wartości tego inputa gdy mu się wartość zmieni ?

Żebym mógł określi moment w którym wartość tego inputa się zmieniła - czyli wtedy gdy dane z Ajax wpłynęłyby do tego inputa to mial bym po sprawie.



everth
Podziel to sobie jakoś na funkcje w JS. Kiedy zapytanie AJAX kończy się sukcesem odpalasz w callbacku te funkcje które cię interesują. Szczegółów ci nie podam bo za cholerę nie mogę zrozumieć o co ci chodzi w tym skrypcie.
fiasko
Ok . Zakończyłem .

Podeszłam troszkę inaczej do tego tematu musiałem przepisać nieco kod i teraz śmiga w jquery smile.gif . Wszystko pięknie się przeładowuje. Wykresy ładują się dynamicznie.
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.