![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 381 Pomógł: 12 Dołączył: 9.07.2007 Ostrzeżenie: (0%) ![]() ![]() |
Witam,
mam problem, mam formularz który po wybraniu selecta bez przeładowania strony wysyła info do pliku php i odbiera dodatkowe pola do tego formularza. Próbuję teraz napisać prostą funkcję w JS która sprawdzi czy jest dane pole i jak jest czy jest puste, jak jest puste to alert ... ale dzieją się dziwne rzeczy, otóż np. Wybieram coś z selekta i dostaje pole a, b i c klikam żeby sprawdziło i wyskakuje że pola są puste, zmieniam selecta stare pola się usuwają i dostaje zamiast nich pola d, e, f klikam żeby sprawdziło i teraz pola a,b,c,d,e,f są puste ... tylko że ich już nie ma i nie powinno tego pokazać ;/ Czym to jest spowodowane ? Pola sprawdzam w ten sposób: Kod if(field.pole_a && field.pole_a.value == ""){ alert('Pole a jest puste'); } field(to zmienna z zawartością formularza) Ten post edytował Elber 4.03.2012, 00:03:17 |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 1 233 Pomógł: 87 Dołączył: 6.03.2009 Ostrzeżenie: (40%) ![]() ![]() |
Są cyrki z pobieraniem wartości niektóych pól formularza, np, textarea.
Mi zawsze dopomaga jQuery.val() |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 381 Pomógł: 12 Dołączył: 9.07.2007 Ostrzeżenie: (0%) ![]() ![]() |
Ja w formularzu mam tylko INPUTy i SELECTy (IMG:style_emoticons/default/smile.gif) mówisz, żeby zmienić
if(field.pole_a && field.pole_a.value == ""){ alert('Pole a jest puste'); } na if($('pole_a') && $('pole_a').val() == ""){ alert('Pole a jest puste'); } (IMG:style_emoticons/default/questionmark.gif) EDIT: Nie pomaga ;/ Ten post edytował Elber 4.03.2012, 09:20:14 |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 1 332 Pomógł: 294 Dołączył: 12.10.2008 Skąd: Olkusz Ostrzeżenie: (0%) ![]() ![]() |
Przypięty: [JavaScript] - jeśli Twój wątek go dotyczy, KONIECZNIE przeczytaj
A Ty nawet nie dałeś kodu JS tylko w zasadzie skrót myślowy... |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 381 Pomógł: 12 Dołączył: 9.07.2007 Ostrzeżenie: (0%) ![]() ![]() |
Kod JS:
Kod <script type="text/javascript"> function CheckForm(field){ var message = ""; if(field.pole_a && field.pole_a.value == ""){ message +="Pole a jest puste !\n"; } if(field.pole_b && field.pole_b.value == ""){ message +="Pole b jest puste !\n"; } if(field.pole_c && field.pole_c.value == ""){ message +="Pole c jest pisute !\n"; } // taki sam kod tylko pole d, e ,f if(message != ""){ alert(message); return false; } } function ValidForm(){ var forms = CheckForm(document.getElementById(\'fromularz\')); if(forms == false){ return 0; } } </script> Przycisk Waliduj: <input type="button" onClick="ValidForm();" value="Waliduj" /> A tutaj funkcja która po zmianie selecta pobiera do div'a konkretne inputy: Kod $("#selects").change(function(){ $('#data').html(''); if(selects.value != '-'){ $.post("plik.php", {select: ""+selects.value+""}, function(data){ if(data.length > 0){ $('#data').html(data); } }); } else { $('#data').html(''); } }); |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 1 332 Pomógł: 294 Dołączył: 12.10.2008 Skąd: Olkusz Ostrzeżenie: (0%) ![]() ![]() |
rzeczywiście element jest gdzieś keszowany (w firebugu nie znalazłem gdzie to jeszcze siedzi) choć go nie ma w drzewie DOM - i właśnie tutaj masz rozwiązanie a jQuery wyżej źle urzywałeś...
by sprawdzić czy w znalezionym formularzu jest w drzewie DOM element o okreslonym atrybucie name możesz w czystym js wyszukać: ff.querySelector('[name=pole_a]'); // zwróci element lub null w jQ można to zapisać w ten sposób: $('[name=pole_a]', field); gdzie drugi argument oznacza kontekst wyszukiwania... jednak nawet jeśli tablica będzie pusta, to konwersja obiektu jQ do wartości bool zawsze zwróci true... a więc po prostu musisz sprawdzać własność length gdzie 0 zostanie skonwertowane do false a każda inna wartość na true lub sprawdzaj pierwszy element jQ gdzie jeśli go nie ma zwróci undefined a jeśli jest zwróci Ci element; $('[name=pole_a]', field).length; // liczba znalezionych elementów $('[name=pole_a]', field)[0]; // pierwszy element tablicy... |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 381 Pomógł: 12 Dołączył: 9.07.2007 Ostrzeżenie: (0%) ![]() ![]() |
Hmm (IMG:style_emoticons/default/biggrin.gif)
Dzięki, ale nie rozumiem jak ulożyć if'a który sprawdzi czy jest element i czy jest pusty ;( if(($('[name=pole_a]', field)) && ($('[name=pole_a]', field).length > 0)) tak to powinno wyglądać (IMG:style_emoticons/default/questionmark.gif) Oki metodą prób i błędów wyczaiłem że tak działa: if(($(\'[name=pole_a]\', field)) && ($(\'[name=pole_a]\', field).val() == "")){ ... } Tak jest poprawnie ? Ten post edytował Elber 4.03.2012, 11:22:48 |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 1 332 Pomógł: 294 Dołączył: 12.10.2008 Skąd: Olkusz Ostrzeżenie: (0%) ![]() ![]() |
niemal dobrze ale ucz się dobrych praktyk i nie szukaj po kilka razy tego samego w drzewie DOM
zapisz sobie wyszukiwanie do zmiennej np. var jQ_inputs = $('[name=pole_a]', field); i potem tą zmienną możesz wykożystać... a dalej pierwszy element tablicy jest elementem drzewa DOM a nie obiektem jQ więc możesz sobie to wyszukiwanie zapisać do zmiennej (zapominając powyższe): var input = $('[name=pole_a]', field)[0]; // albo będzie element albo undefined i teraz tak jak robiłeś możesz gdyż masz element drzewa DOM: if( input && input.value === "") {} ale jeszcze w skrócie każdy pusty ciąg konwertuje się do false (ciąg ze spacją nie jest pusty ;p) więc var sMy = ""; !!sMy === false; // false - a więc !sMy === true skrócony warunek: if( input && !input.value) {} |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 381 Pomógł: 12 Dołączył: 9.07.2007 Ostrzeżenie: (0%) ![]() ![]() |
Dzięki za wyjaśnienia i porady (IMG:style_emoticons/default/smile.gif) Własnie przypisuje pola do zmiennych (nie pomyślałem wcześniej o tym (IMG:style_emoticons/default/smile.gif) )
A czemu masz pole_a === "" a nie pole_a == "" (IMG:style_emoticons/default/questionmark.gif) |
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 1 332 Pomógł: 294 Dołączył: 12.10.2008 Skąd: Olkusz Ostrzeżenie: (0%) ![]() ![]() |
jest szybszy i dokładniejszy
http://www.doman.art.pl/kursjs/kurs/operat...html#porownania ps. w ifie sprawdzenie tego $('[name=pole_a]', field) nic Ci nie da gdyż nawet pusty obiekt jQ konwertuje się do true - musisz sprawdzić albo length albo pierwszy element tablicy... oczywiście jak widzę sprawdzenie tego jest widocznie w jQuery skoro wystarczyło skożystać z metody .val() - a więc de fakto o tych sprawdzeniach o których pisałem tutaj możesz zapomnieć - jednak pamiętaj o nich gdyż przyda Ci się to w innych sytuacjach ;] |
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 381 Pomógł: 12 Dołączył: 9.07.2007 Ostrzeżenie: (0%) ![]() ![]() |
Zrobiłem tak jak radziłeś:
Kod var pole_a = $(\'[name=pole_a]\', field)[0]; if(pole_a && pole_a.value === ""){ message +="Pole a jest puste !\n"; } Dzięki wielkie za pomoc (IMG:style_emoticons/default/wink.gif) Pozdrawiam |
|
|
![]() ![]() |
![]() |
Aktualny czas: 28.09.2025 - 23:54 |