Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Jquery problem
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
jacobson
Czesc Wszystkim, mam taki problem... otoz kiedy wywoluje kod

  1. $(this).fadeOut(500);
  2. $(this).fadeIn(500);
  3. $(this).html('nowa tresc');


to ta nowa tresc pojawia sie zanim jeszcze zostanie zakonczone fadeout... a chcialbym zeby poprzednia tresc cala zniknela, dopiero zamienilo sie na nowa tresc i potem pojawilo. W czym moze byc problem ?

a moze tak zeby nie pytac juz w nowym temacie... jest mozliwosc zrobienia w skrypcie jquery warunku php ? poniewaz mam $().click i on mi sie wywoluje zawsze po nacisnieciu przycisku a chcialbym zeby sprawdzal najpierw czy uzytkownik jest zalogowany i dopiero jezeli jest to zeby ten click dzialal. Z gory dzieki za pomoc smile.gif
tvister
Potrzebujesz timeout-a z czasem oczekiwania 500+500

Co do drugiego to jest taka możliwość :-p
mkdes
Zrób tak. Czas Delay ustawiasz tak aby ładnie zgrywało się w czasie.

Kod
    $(this).delay(500).fadeOut(500);
    $(this).delay(500).fadeIn(500);
    $(this).delay(500).html('nowa tresc');
jacobson
Dzieki za pomoc, a co do drugiego pytania to jak to mozna zrobic ?
zegarek84
Cytat(jacobson @ 28.05.2011, 14:23:44 ) *
Dzieki za pomoc, a co do drugiego pytania to jak to mozna zrobic ?

jeśli wiadomo czy jest zalogowany od razu przy generowaniu strony (logowanie nie jest za pomocą ajax) to generując kod html'a możesz dać w stylu:
Kod
<script type="text/javascript">
var zalogowany = true;
</script>

akurat powyższe ląduje do window.zalogowany - nie będę się rozpisywał - poczytaj o zasięgu zmiennych - lub przekaż przez jakąś funkcję/metodę zmienną do lokalnego skope:
Kod
<script type="text/javascript">
czy_zalogowany(true);
</script>


i potem na podstawie zmiennej (zwykły if) obsługujesz czy ma klik działać czy nie...

jesli logowanie odbywa się za pomoca ajax'a to jeśli masz gdzieś zapisaną odpowiedź w zmiennej to na jej podstawie - inaczej znowu ajax'em musisz sprawdzić czy zalogowany...
gargamel
fadeIn i fadeOut umożliwiają coś takiego jak callback - funkcja wywołana po wykonaniu którejś z tych metod. Proponuję:

  1. $(this).fadeOut(500, function(){
  2. $(this).html('nowa tresc');
  3. $(this).fadeIn(500);
  4. });


jacobson
oooo dzieki Gargamel, Twoja propozycja mi najbardziej odpowiada smile.gif

A jezeli chodzi sprawdzanie w JS zmiennych php

to mam :

  1. $(document).ready(
  2. function(){
  3. var islogged = <?php $this->session->userdata('is_logged_in'); ?>
  4. if(islogged){
  5. $('.content_main_entry_enroll').click(
  6. function(){
  7. $(this).fadeOut(500, function(){
  8. $(this).html('Hello');
  9. $(this).fadeIn(500);
  10. });
  11. }
  12. );}
  13. }
  14. );


ale tak naprawde nie wiem czy w ogole dobrze sie za to zabieram...
gargamel
Jeśli
  1. $this->session->userdata('is_logged_in');
printuje Ci potrzebną zmienną to jak najbardziej dobrze, jeśli nie to oczywiście daj echo.
jacobson
no to w momencie jak mam w php sprawdzanie
$logged_in = $this->session->userdata('is_logged_in');
if(isset($logged_in) || $logged_in == TRUE ) i taki warunek dziala a ten co podalem jak jest

var islogged = <?php $this->session->userdata('is_logged_in'); ?>
if(islogged || islogged == TRUE) juz nie dziala ...:/
gargamel
  1. var islogged = <?php echo $this->session->userdata('is_logged_in'); ?>


Tu natomiast:
Cytat
if(islogged || islogged == TRUE) juz nie dziala ...:/

jeśli userdata('is_logged_in') przyjmuje wartości true / false wystarczy :
  1. if(islogged)
jacobson
No wlasnie probowalem razem z echo i bez echo i nic nie dziala zupelnie :/

Jak dodalem sobie linijke alert(islogged) w funkcji click. to po nacisnieciu wyswietla mi sie w alercie 1 tak wiec to dziala a jak sprawdzam warunek if to mi juz nie dziala :/

probowalem dac samo if(islogged) albo if(islogged == '1') albo if(islogged == 1) i nic nie dziala tongue.gif


Zadzialalo .... brakowalo ";" na koncu linijki (po ?>) i dlatego nie dzialalo ...


Nie iwem czy wypada mi juz .. ale mialbym jeszcze jedno pytanie ... poniewaz ok sprawdzam czy ktos jest zalogowany ale musze tez sprawdzic czy juz jest zapisany jak jest zeby wylaczyc mozliwosc zapisu

mam cos takiego

if(isenrolled != 'Zapisany'){
$(this).fadeOut(500, function(){
$(this).html('<a href="#">Zapisany</a>');
$(this).fadeIn(500);
$(this).removeAttr("href");
});
}}

tylko jest jeden problem bo mam tu ustawione te timeouty przez ktore jezeli ktos szybko kliknie to moze 3 razy zapisac sie na dany event.... a chcialbym zeby nie mial takiej mozliwosci.
gargamel
Najpierw wywalaj href a potem rób te fadeOuty i fadeIny
melkorm
A wiesz że to jest ŻADNE zabezpieczenie?
Powinieneś tą treść ładować via AJAX i wtedy w skrypcie sprawdzać czy jest zalogowany czy nie, walidację w JS można o kant d*py obić.
jacobson
Wszystko w ogole robie na codeigniterze... to wszystko mam w widoku, np jezeli chodzi o sprawdzanie czy uzytkownik jest zalogowany to wl;asnie tak $this->session->userdata('is_logged_in')

a nie rozumiem do konca o czym mowisz jezeli chodzio ladowanie via ajax i potem w skrypcie sprawdzane...

  1. $(document).ready(
  2. function(){
  3. var islogged = <?php echo $this->session->userdata('is_logged_in'); ?>;
  4. if(islogged){
  5. $('.content_main_entry_enroll').click(
  6. function(){
  7. var isenrolled = $(this).text().trim();
  8. if(isenrolled != 'Zapisany'){
  9. $(this).removeAttr("href");
  10. $(this).fadeOut(500, function(){
  11. $(this).html('<a href="#">Zapisany</a>');
  12. $(this).fadeIn(500);
  13. });
  14. }}
  15. );
  16. }}
  17. );


sam ten div wyglada tak: ($is_enrolled jest przekazywane z kontrolera i jest to tablica zapelniona id na ktore juz jest zapisany uzytkownik.

  1. <div class="content_main_entry_enroll">
  2. <?php
  3. $logged_in = $this->session->userdata('is_logged_in');
  4. if (in_array($item->id, $is_enrolled) && $logged_in) {
  5. ?>
  6. <a href="#">Zapisany</a>
  7. <?php } else { ?>
  8. <a href="##" onclick="enroll('<?php echo $item->id; ?>')">Zapis</a>
  9. <?php } ?>
  10.  
  11. </div>


Szczerze to nie przychodzi mi do glowy inna metoda, zeby to zrobic...

a i tak btw to zamiana miejscami tego hrefa z fadami nie zmienia nic niestety :/
melkorm
Poczytaj o AJAX, inaczej tego nie zrobisz ani nie zabezpieczysz.

Uprawnienia po stronie przeglądarki łamie się ( to nie jest nawet łamanie ) w kilka sekund, wystarczy wy-edytować kod HTML/JS i mogę zrobić wszystko co mi się żywnie podoba bez walidacji po stronie serwera.

jacobson
no ok ale moze jakas podpowiedz co mam poczytac o ajax ?
rozumiem ze mam to zrobic tak ze wszystko to co mam w tym divie ma byc ladowane przez ajaxa a przed zaladowaniem (wywolaniem skryptu ajaxa) mam miec sprawdzenie skryptem php tak ?
melkorm
AJAX'em wywołujesz skrypt php, który zwróci Tobie treść lub to że nie jest zalogowany.

To masz poczytać dokładnie
jacobson
Dobra jezeli moge to jeszcze jedno pytanie ... Cala tresc main wywolywana jest w foreachu. Ajaxem mam sie posluzyc zeby obsluzyc sam przycisk.
po nacisnieciu przycisku wywolywana jest funkcja
  1. function enroll(id){
  2.  
  3. $(document).ready(
  4. function(){
  5. $.post(
  6. 'main/ajax_function/'+id
  7. );
  8. ...

ta funkcja odpowiada za zapisanie do bazy ... Czy Tobie chodzi o dodanie jakiegos callback z tej funkcji czy bardziej o ladowanie w ogole calego tego foreacha?
melkorm
Tak, w callback pod response dostajesz odpowiedź i wtedy możesz dać tam np "0" => nie zalogowany, treść = zalogowany itp.
jacobson
a Jestem w stanie jako funkcje np error pobrac to co zwraca kontroler i w zaleznosci od tego wyswietlic odpowiedni komunikat ?
bo wlasnie probuje caly czas przekazac
error: function(data){
if(!data) {
alert("nie zalogowany");
}
}
melkorm
error wykonuje się gdy żądanie zwróciło błąd, poczytaj dobrze w dokumentacji.
jacobson
nom wiem tylko bardziej chodzi mi o to zeby takie sytuacje jak niezalogowany uzytkownik albo tez juz zapisany na event byly rozpoznawane jako error.

nawet jak mam w kontrolerze funkcje if(zalogowany) to costam else return 0;

i jak robie w tej funkcji
success: function(data){
if(data == 0) alert("nie zalogowany");
}
niby powinno dzialac dobrze ale nie dziala.... (probowalem z 0 i z "0")
melkorm
a nie przypadkiem exit, albo die, a w JS !data
jacobson
probowalem !data po zrobieniu tak robi cos dziwnego ... bo niby jak ktos nie jest zalogowany to wyswietla alert... jak ktos jest zalogowany i zapisany na event to go nie wyswietla ale jak ktos jest zalogowany i nie zapisany na event to juz znowu wyswietla ten alert tongue.gif tak wiec dziala w 50% dobrze tongue.gif

a nie sory jednak jak ktos jest zapisany to tez sie wyswietla tongue.gif
melkorm
to może alert(data) i zobacz co zawiera ta zmienna? ...

DEBUGUJEMY PANOWIE I PANIE DEBUGUJEMY exclamation.gif!
jacobson
nie wyswietla nic tongue.gif pusty alert ...
  1. function ajax_function(){
  2. $is_logged_in = $this->session->userdata('is_logged_in');
  3. if (isset($is_logged_in) && $is_logged_in == TRUE){
  4. $this->selection_model->enroll();
  5. }else return 0;
  6. }


  1. $.ajax({
  2. url: 'main/ajax_function/'+id,
  3. datatype: 'json',
  4. success: function(data){
  5. alert(data);
  6. }


moze o czyms gdzies zapomnialem ...
melkorm
... .

Zwracana zawartość to w Twoim przypadku HTML JSON, skoro zwracasz PUSTĄ stronę to co sądzisz będziesz miał w data?, podpowiem NIC.

W dodatku przy JSON musisz zwrócić poprawną zawartość.

Najpierw naucz i zrozum jak się czegoś używa, a dopiero później używaj.
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.