Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Niepożądane wielokrotne utworzenie elementu
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
bartkowiakmateusz
Witam, jestem początkujący w dziedzinie JavaScriptu i mam pewien problem, będę wdzięczny za pomoc.

Zadaniem skryptu, który napisałem, jest pobranie danych poprzez Ajax, a następnie utworzenie diva i umieszczenie w nich tych danych. Skrypt działa prawidłowo, jest on wykonywany po kliknięciu w odnośnik (zdarzenie onClick). Problem polega na tym, że przy kilkukrotnym szybkim kliknięciu w ten odnośnik tworzy się więcej niż 1 div. Próbowałem sprawdzać przed wykonaniem kodu czy obiekt, który tworzę już istnieje, jednakże nie odniosło to skutku.

[JAVASCRIPT] pobierz, plaintext
  1. if (!document.getElementById('div_id'))
  2. {
  3. data = do_ajax();
  4. div = document.createElement('div');
  5. div.id = 'div_id';
  6. div.InnerHTML = data;
  7. document.getRootElement().appendChild(div);
  8. }
[JAVASCRIPT] pobierz, plaintext


Będę wdzięczny za wskazanie możliwości rozwiązania problemu, pozdrawiam

Mateusz Bartkowiak
zegarek84
ech - nie ma całości kodu a w ajaxie mało robiłem ale z tego co widzę 2 razy wywołałeś funkcję która w środku czeka dopiero na odpowiedź asynchronicznego ajaxa wywołując funkcję do_ajax() w której jest jakiś return (dlatego jest w porządku jeśli wolniej klikniesz) - zamiast sprawdzać, czy został utworzony już obiekt to na początku funkcji przypisz wartość jakiejś zmiennej będącej w zasięgu tej funkcji jednak poza nią - zrób jakiś kontroler czy już funkcja została wywołana i jeśli została wywołana przerwij działanie funkcji - na 99% to rozwiąże problem...

lub nie wiem jak masz podpięte zdarzenie, czy przez samą metodę .onclick - jeśli tak to na poczatku wywołania pierwszy raz funkcji wyzeruj tą metodę, a jeśli przez .addEventListener to zastosuj .removeEventListener
bartkowiakmateusz
Witam, dziękuję za odpowiedź, chyba udało mi się rozwiązać problem. Korzystałem już wcześniej ze zmiennej, która określała, czy obiekt jest aktualnie schowany czy pokazany, jednak nie dawało to zamierzonego efektu, w przypadku gdy kliknięcia następowały bardzo szybko po sobie. Wygląda na to, że działo się tak dlatego, ponieważ przypisanie do zmiennej wartości informującej o wywołaniu funkcji następowało dopiero po pobraniu danych przez Ajaxa, a kolejne kliknięcia następowały przed pierwszym przypisaniem wartości do zmiennej.

Pozdrawiam, Mateusz Bartkowiak
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.