Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [jquery]Kłopot z odwolaniem się do wczytanej treści.
Forum PHP.pl > Forum > XML, AJAX
sheriff
Witam.

Mój problem polega na tym, że gdy wczytam jakaś zawartość przez JQuery i potem chcę się do niej odwołać (np. poprzez #id) to jest niemożliwe.
Wszystko zachowuje się tak jakby tam nie było żadnych elementów. Szukając rozwiązania natrafiłem na plugin listen do JQ. Działa on w ten sposób, że mogę odwołać się tylko do zdarzeń wczytanej treści. Ale nie mogę jej modyfikować.

W jaki sposób mogę "dostać" się do tych wczytanych elementów ?
krowal
Nie wiem czy dokładnie o to Ci chodzi, ale zerknij na to: http://api.jquery.com/live/

Description: Attach a handler to the event for all elements which match the current selector, now or in the future.
devnul
@krowal: live binduje zdarzenia do elementów istniejących w momencie inicjaliacji jak i dodanych do drzewa DOM już po zainicjalizowaniu metody live a z tego co zrozumiałem to wychodzi na to że kolega się wcale nie może dobrać do tych elementów
@sheriff: kod?
sheriff
Już sobie poradziłem.
Formularz obsłużyłem w ten sposób.
  1. $('#form1').live('submit', function(){
  2. $('#margines').load('core.php', $(this).serializeArray());
  3. });


Formularz był ładowany poprzez load():
  1. $('#margines').load('setup_parts/part1.htm');


Ale i tak moja ciekawość nie jest do końca zaspokojona co jeśli nie ma żadnego zdarzenia (tak jak powyżej submit) a chcę odczytać np. zawartość jednego z pól formularza?
Live() zawsze wymaga zdarzenia więc w takim wypadku odpada.
gcdreak
Co rozumiesz pisząc "bez zdarzenia"? Możesz podać jakiś przykład?
Według mnie zdarzenie jest zawsze(załadowanie strony, wpisanie wartości, poruszenie myszką itp)
devnul
Cytat
Ale i tak moja ciekawość nie jest do końca zaspokojona co jeśli nie ma żadnego zdarzenia (tak jak powyżej submit) a chcę odczytać np. zawartość jednego z pól formularza?
Live() zawsze wymaga zdarzenia więc w takim wypadku odpada.

[JAVASCRIPT] pobierz, plaintext
  1. $('element_typu_input').val()
[JAVASCRIPT] pobierz, plaintext
sheriff
To może podam przykład. Mam stronę na której jest przycisk nazwijmy go button1.
Wczytuje poprzez load() z zewnętrznego pliku formularz.
Ma on pole tekstowe (text1). Jaki trzeba zastosować kod, żeby po kliknięciu button1 usunąć pole text1?
  1. $('#button1').click(function(){
  2. $('#text1').remove();
  3. });

Powyższy kod nie działa.
devnul
jeżeli przez nazwanie masz namyśli nadanie ID danemu elementowi to dokładnie tak jak to pokazałeś jeśli natomiast przez nazwanie rozumiesz użycie atrybutu name to albo nadaj ID zgodnie z tymi nazwami które zadeklarowałeś wyżej albo zrób tak
[JAVASCRIPT] pobierz, plaintext
  1. $('button[name=button1]').click(function(){
  2. $('input[name=text1]').remove();
  3. });
[JAVASCRIPT] pobierz, plaintext
sheriff
Przez nazwanie mam namyśli nadanie ID. A powyższy kod nie działa, ponieważ formularz z polem #text1 jest wczytywany poprzez load(). I jquery nie widzi formularza ani pola. Co można na to zaradzić ?
krowal
Bardzo możliwe, że wywoływałeś remove() w trakcie albo przed wczytaniem tego twojego kodu i umieszczeniu go w DOM, w czasie gdy element na którym wywoływałeś remove() jeszcze 'nie istniał' w drzewie DOM. Dlatego nie mogłeś się do niego dostać.

EDIT:
Zobacz czy coś takiego zadziała:
  1. $('#margines').load('core.php', $(this).serializeArray(), fuction(){
  2. $('#text1').remove();
  3. });
devnul
@sheriff: a przycisk też wczytujesz przez load? bo jeśli tak to albo dokładnie jak poprzednio live() albo musisz bindować zdarzenie dopiero po wczytaniu tych pól przez laod np tak
[JAVASCRIPT] pobierz, plaintext
  1. $('#formularz').load('cos.html', function() {
  2. $('#button1').click(function(){
  3. $('#text1').remove();
  4. });
  5. });
[JAVASCRIPT] pobierz, plaintext



//edit:
@krowal: ale on chce mieć zdarzenie po kliknięciu a nie po załadowaniu więc na cholere usuwać coś co dopiero załadowałeś?
sheriff
Dziękuję za pomoc. To już wszystko co chciałem wiedziećwinksmiley.jpg
gcdreak
Zainteresuj się funkcją delegate()
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.