![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 253 Pomógł: 1 Dołączył: 26.08.2009 Skąd: Szczecin Ostrzeżenie: (10%) ![]() ![]() |
Mam pewnie problem w kodzie strony która pisze przy pomocy Javascript z wykorzystanie jQuery. Chodzi o to, że po dodaniu pól input do pliku i przypisaniu do nich akcji działa zawsze ta ostatnia - jeśli są dwa pola działa drugie, jeśli trzy trzecie itd.
W internecie znalazłem tak na prawdę dwa rozwiązania, a raczej podpowiedzi jednak nie mogę cały czas uzyskać swojego efektu. Pierwsza było to, żeby funkcja miała inne nazwy (argumenty), u mnie to zawsze występuje, ale dla pewności jeden input po prostu wyświetla alert podczas gdy drugi odwołuje się do docelowej funkcji. Drugą podpowiedź przedstawię po przedstawieniu kodu:
Druga podpowiedź, mówi żeby najpierw zrobić xField.relatedElement a potem newRow.innerHTML, jednak tutaj nie wiem jak mam to zrobić, skoro później mam dopiero przypisanie obiektu do xField. Ciekawe jest również to, że zawsze działa ostatnia linijka kodu, czyli akcje editLink. Będę wdzięczny za podpowiedzi. Czy ktoś może i pomóc z tym problemem? |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 1 332 Pomógł: 294 Dołączył: 12.10.2008 Skąd: Olkusz Ostrzeżenie: (0%) ![]() ![]() |
problem polega na tym, że korzystasz z innerHTML (swoją droga jak już jQ to równoważne jest .html() ;p)... a dokładniej wyjaśnię...
wstawiając elementy przez innerHTML tworzysz nowe - to wiesz gdyż potem szukasz przez document.getElementById... ale nie wiesz, że konstrukcja: newRow.innerHTML += HTML; równoważna jest zapisowi: newRow.innerHTML = newRow.innerHTML + HTML; gdzie cała zawartość newRow zostaje "wykasowana" i wszystkie elementy zostaną utworzone od nowa, przez co to nie są dokładnie te same elementy choć na takie wyglądają... (brak zdefiniowanych własności wcześniej i handlerów)... rozwiązanie na szybko dla Ciebie to nie preferowane dalsze korzystanie z innerHTML ale zanim te elementy będziesz wyszukiwał wstaw cały kod html... dopiero potem wyszukuj elementy i dodaj im właściwości, podpinaj zdarzenia itd... ale już potem nie próbuj korzystać z innerHTML na tym elemencie... rozwiązanie bardziej poprawne to zrezygnować z innerHTML i tworzyć nowe elementy przez DOM i przez DOM je dodawać do drzewa (.appendChild) gdzie nie skasujesz starych a nowe nie musisz wyszukiwać gdyż masz do nich referencję podczas tworzenia w zmiennych... ps. .relatedElement chyba nie jest standardową własnością elementów drzewa DOM, w tym przypadku skoro korzystasz z jQuery to może skorzystaj z .data (dodaje też nie standardową własność do elementu data ale masz wtedy tylko jedną taką własność i w niej zamieściłbyś więcej elementów - w zasadzie w tym nowym jQ w data jest tylko identyfikator klucza a wszystkie własności przechowywane są w jQ) Ten post edytował zegarek84 14.12.2011, 11:04:51 |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 253 Pomógł: 1 Dołączył: 26.08.2009 Skąd: Szczecin Ostrzeżenie: (10%) ![]() ![]() |
Wielki dzięki za rzeczową podpowiedź. Mówiąc szczerze to co do tego += to zapomniałem, że to w taki sposób działa. Nie wiem czemu wymyśliłem sobie, że jest to dopisanie do ciągu. No ale na pewno nie wiedziałem tego, że w momencie przepisywania elementu tracone są wszystkie handlery itp.
Jeszcze raz wielki dzięki za odpowiedź. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 22.08.2025 - 22:17 |