Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JavaScript] Dziwny problem z :disabled
Forum PHP.pl > Forum > Przedszkole
Fred1485
Cześć napotkałem dziś bardzo dziwny problem, mianowicie:

Na początku wyłączam button od formularza metodą

  1. $('#submit').attr('disabled', 'true');

albo
  1. $('#submit').prop('disabled', 'true');


Potem jeśli pole formularza zostałoby uzupełnione to ten atrybut disabled usunąłbym, więc stworzyłem prosty if ale że nie działało to w ogóle więc wywaliłem całą linijkę od wyłączania (patrz wyżej) i po odświeżeniu strony normalnie osłupiałem bo button dalej był nieaktywny. Nie było możliwości już tego włączyć, wyłączyłem przeglądarkę włączyłem od nowa i już działało ale po dodaniu linijki od disabled znów nie działa nawet jak ją usunę biggrin.gif Przecież to nie PHP że w sesji przechowuje na określany czas tylko nie ma w skrypcie to nie ma biggrin.gif

Wyjaśni ktoś o co tu chodzi bo już śmiać mi się chce biggrin.gif
Turson
Cache przeglądarki
Fred1485
Tamten problem już rozwiązany i wiem czemu, ale teraz jeszcze taka sprawa:

https://jsfiddle.net/L6xq65q2/1/

Chciałbym zrobić że dla każdego elementu z klasy input -> jest spełniony warunek że pole nie jest puste to button się uaktywnia (wiem jak uaktywnianie zrobić) tylko jak zrobić to że dla każdego, np po keyupie w dowolnym polu tekstowym...

Chciałbym zrobić tak że "nie wiem" ile tych pól tekstowych jest i poprzez each jakoś to wykombinować.
Comandeer
Nie keyup, tylko input: https://mathiasbynens.be/notes/oninput

Pobierz wszystkie .input, sprawdź ile ich jest i następnie sprawdzaj ile pól jest wypełnionych
https://jsfiddle.net/Comandeer/mqy3qnyw/1/
Fred1485
Nie użyłeś tutaj each, nie lepiej by było z tym zrobić? (uczę się podstawowych rzeczy dlatego pytam biggrin.gif )
Comandeer
Prawda jest taka, że zapis typu $('.input').on('click') i tak pobierze wszystkie elementy i będzie do nich zdarzenia przypinał osobno, więc pod spodem tego $.fn.each użyje. My za to nie musimy wink.gif
Fred1485
Nie wiem może moja nauka jeszcze do tego stopnia nie doszła dlatego nie rozumiem:

  1. if(this.value)
  2. {
  3. if(valid.indexOf(this) === -1)
  4. valid.push(this);
  5. }


skąd wziąłeś jakiś operator value i dlaczego this a nie $(this) ?
Comandeer
Eh - i to jest właśnie skutek nauki jQuery bez wcześniejszego zapoznania się z podstawami JS i DOM?

W jQuery jest zasadnicza różnica pomiędzy $(this) i this

  • $(this) to obiekt jQuery reprezentujący dany element DOM; tym samym ma wszystkie metody z $ - stąd mamy $(this).val()
  • this to czysty element DOM, bez owinięcia go w obiekt jQuery. Co to oznacza? Że można w ciemno założyć, że większość atrybutów elementu jest dostępna jako własności this. Tym samym jeśli chcemy dostać się do [value] pola zrobimy to przez własność value naszego this.
Fred1485
Dobra a w woli ścisłości ty tutaj użyłeś wtyczki valid do formularzy czy nie?
Comandeer
Nie użyłem żadnej wtyczki. valid tp nazwa tablicy w kodzie
Fred1485
Na pewno da się to zrobić poprzez .each nie odpuszczę biggrin.gif
Comandeer
No da się…

  • W chwili, gdy ktoś zmieni coś w polu odpalasz sobie funkcję np. checkValidity
  • Funkcja ta liczy ile jest pól i zapisuje sobie to do zmiennej l. Równocześnie tworzy sobie zmienną v, w której zapisze liczbę wypełnionych pól
  • Funkcja leci pętlą $.fn.each po wszystkich polach i jeśli dane pole jest wypełnione, to dodaje 1 do v (inkrementuje tę zmienną)
  • Po przeleceniu wszystkich elementów sprawdza czy l === v; jeśli tak, odblokowuje przycisk; jeśli nie, zablokowuje przycisk
Fred1485
https://jsfiddle.net/j6rd176c/ zrobiłem sobie prototyp i działa ale tylko w jedną stronę, jeśli będą pola wypełnione to odblokuj ale jeśli usuniemy dane to dalej zostanie odblokowany... przecież za każdym razem od nowa funkcja jest uruchamiana z inputem?
johny_s
masz tylko "sciąganie" atrubutu 'disabled', nigdzie przy sprawdzaniu go nie ustawiasz
Fred1485
Ohoho rzeczywiście, problem rozwiązany wink.gif
Dzięki wszystkim!
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.