Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [jQuery] Dodawanie animacji wczytywania do przycisku na chwilę. Inne spodoby pisania.
Forum PHP.pl > Forum > Przedszkole
janeiro
Ponizszy kod dodaje na chwile animacje ladowania do przycisku i pozniej przywroca go do normalnego stanu tylko jest za duzo powtarzania kodu. Czy mozna to ugryzc inaczej, aby nie pisac tyle?

Chodzi o to,ze przy wiekszej ilosci przyciskow bedzie mozna sobie palce polamac przy pisaniu :O

Moze uzyc jakos funkcji .find() aby znalezc w przycisku selektor <i>, usunac z niego klase .fa-plus i zastapic ja klasa ikony .fa-spinner?

  1. <button id="btnAdd" class="btn btn-success" onclick="add_book()"><i class="fa fa-plus"></i> Add Book</button>
  2. $("#btnAdd").click(function () {
  3. $(this).html('<i class="fa fa-spinner fa-spin"></i> Wczytywanie...');//adding animation
  4. $(this).attr('disabled', true);//disabling
  5. setTimeout(() => {
  6. $(this).attr('disabled', false);//enabling
  7. $(this).html('<i class="fa fa-plus"></i> Add Book');//defaulting
  8. }, 1000);
  9. });


Zamiast ID moglbym uzyc klasy .btn dla wszystkich przyciskow
  1. $(".btn").click(function () {

ale tutaj pojawia sie problem, bo przycisk Edit mialby zmieniony opis na Add Book
Tutaj odnosnik do codepen aby szybko sprawdzic dzialanie
Tomplus
dlaczego zamiast #btnAdd w skrypcie JS nie użyjesz klasy .btnAdd lub coś bardziej zrozumiałego .btbAddBook?
janeiro
Jesli uzyje klasy zamiast id, skrypt zamieni opis nastepnego przycisku z np. Edit na Add
viking
To albo opakuj Add/Edit w oddzielny blok (span) i go nie podmieniaj, albo zapisuj pierwotny komunikat w button data-message="Add" i z niego skorzystaj przy powrocie do stanu pierwotnego.
janeiro
Dobra. Znalazłem rozwiązania bez niepotrzebnego pakowania dodatkowych tagów typu <span> w plikach.
  1. $(".btn").click(function() {
  2. var initialValue =$(this).html(); //stores initial value in a variable
  3. $(this).html('<i class="fa fa-spinner fa-spin"></i> loading...'); //adding animation
  4. $(this).attr('disabled', true); //disabling
  5. setTimeout(() => {
  6. $(this).html(initialValue); //restores initial value from a variable
  7. $(this).attr('disabled', false); //enabling
  8. }, 500);
  9. });
  10. </script>

Podsumowujac, zawartosc przycisku zapisuje do zmiennej i pozniej przywracam wartosc. Wszystko za pomoca 2 linii kodu i dziala na 50 przyciskach na stronie, zmieniajac animacje tylko kliknietego. Mam nadzieje, ze komus sie przyda.
Stracilem sporo czasu na szukanie rozwiazania. Najwiekszym problemem jest nauka syntaxu :/
trueblue
Zobacz tak:
https://jsfiddle.net/rnLhcsf3/
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.