Strona 2 z 3 PierwszyPierwszy 123 OstatniOstatni
Pokaż wyniki od 11 do 20 z 24

Wątek: [jQuery/JS] Dynamiczne aktywowanie/dezaktywowanie przycisków

  1. #11
    Zarejestrowany
    Dołączył
    Jan 2012
    Posty
    13

    Domyślnie

    konsola błędów wyrzuca taki błąd:TypeError: conditions is undefined.

    wrzuciłem ten alert z .length przed .each() i przedostatnio wyświetliło 173, ostatnio 174. wyświetla jakąś liczbę wziętą z kosmosu, za każdym razem o 1 większą. dlatego z kosmosu, bo przycisków jest 27 i tyle wyświetla, jak odświeżę 'shop'.

    czy może chodzić o .each(), który nie radzi sobie z dynamicznie dodanymi przyciskami?

    bo gdy odświeżamy 'shop' to zaraz na samym początku są ładowane, a gdy ładujemy najpierw home a dopiero po kilku sekundach 'shop', to wtedy one już są po jakimś czasie ładowane i może each ich nie widzi? znalazłem na ten temat coś takiego:
    http://stackoverflow.com/questions/2...added-elements
    Ostatnio edytowane przez bpawel10 ; 30-08-2013 o 17:07

  2. #12
    Aktywny
    Dołączył
    Jul 2008
    Posty
    866

    Domyślnie

    Właśnie to było moje przypuszczenie. Jak mamy ajaxa to najlepiej jest używać dataType: html żeby po ajaxie nam wszystkie elementy zaktualizowało.. W teorii.

    Przypadku z each + ajax nigdy nie miałem u siebie, ale chyba zaraz przetestuję z ciekawości.

    Może też być jakiś problem ze zdarzeniami, dlatego o nie pytałem:

    Kod php:
    $("div").on("click", function() {
    alert("zle, zadziala tylko dla elementów podczas ładowania strony");
    });

    $(
    "body:).on("click", "div", function(){
    alert("
    dobrzezadziala teraz oraz w przyszłych załadowanych elementach");
    }); 

  3. #13
    Aktywny
    Dołączył
    Jul 2008
    Posty
    866

    Domyślnie

    http://unicorn.host22.com/tmp/index.html
    EDIT: Wrzuciłem na stronę, ale ajax nie działa z jakiegoś powodu. U mnie na dysku działa pięknie.

    jquery-1.10.1

    Kod:
    <div class="tester">
    CLICK FOR ALERT + AJAX
    </div>
    W index.html oraz ajax.html ^

    Kod:
    <script>
    $(document).ready(function() {
        $("body").on("click", ".tester", function() {
            $(".tester").each( function() {
                alert("test");
            });
        });
    
        $(".tester").on("click", function() {
                $.ajax({
                    type: "POST",
                    url: "ajax.html",
                    success: function(data) {
                        $("body").append(data);
                    },
                    dataType: "html"
                });
        });
    });
    </script>
    W index.html ^

    Przykład:
    Klikniesz na pierwszy div:
    Dostaniesz 1x alert "test".
    Uruchomi się skrypt ajax, teraz masz 2 divy.

    1. Jeżeli klikniesz w pierwszy div:
    - 2x alert, each działa prawidłowo.
    - uruchomi się ajax, teraz widzisz 3 divy.

    2. Jeżeli klikneisz w drugi div:
    - 2x alert, each działa prawidłowo.
    - koniec. brak ajaxa, bo nowy element nie ma zdarzenia onclick - ajax.


    Kiedyś do tego służyło w jquery .delegate co oznacza, że zdarzenie zostanie przypisane do wszystkich elementów spełniających warunek w tej chwili oraz w przyszłości.

    Być może to jest problemem.
    Ostatnio edytowane przez Drikam ; 30-08-2013 o 18:54

  4. #14
    Zarejestrowany
    Dołączył
    Jan 2012
    Posty
    13

    Domyślnie

    to znaczy zdarzenia są problemem? ale u mnie w kodzie dotyczącym odświeżania tych przycisków nie ma żadnej obsługi zdarzeń, ani .click(), ani .on(), ani live(), ani też delegate() ani żadnej innej.
    spróbowałem natomiast ustawić:
    Kod php:
    $.ajaxSetup({dataType:'html'}); 
    ale dalej jest to samo.
    a może są jakieś różnice w wersjach? ja mam jquery 1.8.3

  5. #15
    Aktywny
    Dołączył
    Jul 2008
    Posty
    866

    Domyślnie

    No to jak wyłapujesz czy ktoś kliknął na .box? Absolutnie nie orientuję w różnicach pomiędzy wersjami.

  6. #16
    Zarejestrowany
    Dołączył
    Jan 2012
    Posty
    13

    Domyślnie

    Kod php:
    $('a[rel=ajax]').live('click', function(e){ [...] }); 

  7. #17
    Aktywny
    Dołączył
    Jul 2008
    Posty
    866

    Domyślnie

    Kod php:
    $("body").on("click""a[rel=ajax]" function(e){ [...] }); 
    A to nie pomoże? live jest przestarzałe, ale teoretycznie robi dokładnie to co napisałem.

    Powodzenia. ; )
    Ostatnio edytowane przez Drikam ; 30-08-2013 o 19:13

  8. #18
    Zarejestrowany
    Dołączył
    Jan 2012
    Posty
    13

    Domyślnie

    przecież takie coś daje taki sam efekt jak live(), tylko nie jest przestarzałe
    natomiast live, mimo że jest przestarzałe, działa jak trzeba i na pewno nie powoduje błędu.
    dla pewności sprawdziłem, bo nie ma tu dużo roboty, i jest tak samo.

    napisałem jeszcze prostą stronkę do przetestowania .each() na mojej wersji jquery, i działa bez problemu, tzn. widzi także divy dorzucone przez ajaxa.

  9. #19
    Aktywny
    Dołączył
    Jul 2008
    Posty
    866

    Domyślnie

    No to zastanów się czemu masz błąd:TypeError: conditions is undefined i skąd masz tyle przycisków. /obvious

  10. #20
    Zarejestrowany
    Dołączył
    Jan 2012
    Posty
    13

    Domyślnie

    TypeError:conditions is undefined oznacza zapewne, że zmienna conditions jest niezdefiniowana, tyle że definiuję ją w tej linijce:
    Kod php:
    var conditions=$(this).attr('data-conditions'); 
    już wiem, dlaczego było tyle przycisków - najpierw ładowało się home, a na podstronie home też są przyciski, i te też były liczone. dodatkowo za każdym razem kupowałem kolejny towar, a te towary potem są w podstronie home wyświetlane z przyciskami, więc dlatego zwiększało o 1. zmieniłem kod tego alertu na:
    Kod php:
    alert($("#sub_shop .but_box[data-conditions!='']").length); 
    i wyświetla 27.
    niestety, alert wewnątrz each() nadal się nie wyświetla

Strona 2 z 3 PierwszyPierwszy 123 OstatniOstatni

Informacje o wątku

Użytkownicy przeglądający ten wątek

Aktualnie 1 użytkownik(ów) przegląda ten wątek. (0 zarejestrowany(ch) oraz 1 gości)

Podobne wątki

  1. [Tutorial][jQuery] Dynamiczne wczytywanie strony
    Przez Bartek w dziale Poradniki
    Odpowiedzi: 7
    Ostatni post / autor: 30-04-2013, 13:47
  2. Ramki a dynamiczne wczytywanie
    Przez Komando w dziale Pytania dotyczące silnika Xnova
    Odpowiedzi: 3
    Ostatni post / autor: 21-01-2012, 09:43
  3. Dynamiczne nadawanie klasy
    Przez Grze_chu w dziale JavaScript/AJAX
    Odpowiedzi: 0
    Ostatni post / autor: 16-01-2010, 21:51
  4. Mintajax ->Dynamiczne zakladki
    Przez gylopl w dziale JavaScript/AJAX
    Odpowiedzi: 14
    Ostatni post / autor: 27-06-2009, 17:45
  5. [Dynamiczne]Edytowanie rekordów
    Przez Gomez w dziale JavaScript/AJAX
    Odpowiedzi: 16
    Ostatni post / autor: 15-03-2009, 20:01

Zakładki

Uprawnienia umieszczania postów

  • Nie możesz zakładać nowych tematów
  • Nie możesz pisać wiadomości
  • Nie możesz dodawać załączników
  • Nie możesz edytować swoich postów
  •