![]() |
![]() |
![]() ![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 243 Pomógł: 1 Dołączył: 1.06.2010 Ostrzeżenie: (0%) ![]() ![]() |
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> Ten post edytował fiasko 3.02.2011, 17:06:26 |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 260 Pomógł: 41 Dołączył: 6.04.2009 Skąd: Gdańsk/okolice Ostrzeżenie: (0%) ![]() ![]() |
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. |
|
|
![]() ![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 243 Pomógł: 1 Dołączył: 1.06.2010 Ostrzeżenie: (0%) ![]() ![]() |
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 ![]() ![]() ![]() Ten post edytował fiasko 3.02.2011, 11:46:23 |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 111 Pomógł: 10 Dołączył: 16.07.2009 Skąd: Toruń Ostrzeżenie: (0%) ![]() ![]() |
Przed data_s dodaj takie magiczne słowo
a jak nie zadziała, to zamień tą linijke na taką mistyczną:
Ten post edytował benio101 3.02.2011, 15:52:31 |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 243 Pomógł: 1 Dołączył: 1.06.2010 Ostrzeżenie: (0%) ![]() ![]() |
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ę. |
|
|
![]() ![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 111 Pomógł: 10 Dołączył: 16.07.2009 Skąd: Toruń Ostrzeżenie: (0%) ![]() ![]() |
Ty, no podajesz kod bez deklaracji i psioczysz, że Ci każę zadeklarować, no hej!
A działa? Albo zadeklaruj data_max globalnie, za 1. SCRIPT, tj.
|
|
|
![]() ![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 243 Pomógł: 1 Dołączył: 1.06.2010 Ostrzeżenie: (0%) ![]() ![]() |
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 . ![]() Ten post edytował fiasko 4.02.2011, 02:04:18 |
|
|
![]() ![]()
Post
#8
|
|
![]() Grupa: Zarejestrowani Postów: 111 Pomógł: 10 Dołączył: 16.07.2009 Skąd: Toruń Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]() ![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 243 Pomógł: 1 Dołączył: 1.06.2010 Ostrzeżenie: (0%) ![]() ![]() |
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> Ten post edytował fiasko 4.02.2011, 01:14:59 |
|
|
![]() ![]()
Post
#10
|
|
![]() Grupa: Zarejestrowani Postów: 111 Pomógł: 10 Dołączył: 16.07.2009 Skąd: Toruń Ostrzeżenie: (0%) ![]() ![]() |
ojojoj... no to wybacz, ale niestety muszę na tym etapie załamać ręce: nie znam Ajaxa
![]() A jakbyś skopiował wartości do ukrytego inputa (input type="hidden")? Ten post edytował benio101 4.02.2011, 01:36:25 |
|
|
![]() ![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 243 Pomógł: 1 Dołączył: 1.06.2010 Ostrzeżenie: (0%) ![]() ![]() |
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. |
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 782 Pomógł: 153 Dołączył: 21.07.2010 Ostrzeżenie: (0%) ![]() ![]() |
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.
-------------------- Już mi się ani wiedzieć, ani tym bardziej myśleć nie chce.
[Think different]! |
|
|
![]() ![]()
Post
#13
|
|
Grupa: Zarejestrowani Postów: 243 Pomógł: 1 Dołączył: 1.06.2010 Ostrzeżenie: (0%) ![]() ![]() |
Ok . Zakończyłem .
Podeszłam troszkę inaczej do tego tematu musiałem przepisać nieco kod i teraz śmiga w jquery ![]() |
|
|
![]() ![]() |
![]() |
Aktualny czas: 22.08.2025 - 03:24 |