Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [JavaScript] Błąd przy ustalaniu
Dominator
post
Post #1





Grupa: Zarejestrowani
Postów: 565
Pomógł: 15
Dołączył: 11.10.2010

Ostrzeżenie: (20%)
X----


Witajcie
Chcę wykonać takie coś, żeby ktoś na stronie mógł raz wykonać funkcję. W tym celu piszę sobie var used;. Pod tym nadaję temu wartość 0. Następnie sprawdzam czy used == 0, jeśli tak, to coś się wykonuje, a następnie nadaję zmiennej used wartość 1. Problem w tym, że po nadaniu wartości 1 do zmiennej used nadal jest 0.

  1. var used;
  2. used = 0;
  3. if(used == 0)
  4. {
  5. $(".box").animate({
  6. marginTop: '+=40px'
  7. }, 1000, function()
  8. {
  9. alert("!");
  10. used = 1;
  11. });
  12. }


Odświeżam.

Ten post edytował Dominator 3.10.2012, 21:30:04
Go to the top of the page
+Quote Post
Arcioch
post
Post #2





Grupa: Zarejestrowani
Postów: 324
Pomógł: 110
Dołączył: 18.09.2012

Ostrzeżenie: (0%)
-----


Odpowiadam smile.gif Przeanalizuj i dostosuj smile.gif szkoda pisać koło na nowo smile.gif

  1. <!DOCTYPE html>
  2. <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
  3. <script type="text/javascript" src="http://code.jquery.com/jquery-1.8.1.min.js"></script>
  4. $(function(){
  5. $("#box").one("click", function() {
  6. $(this).animate({
  7. marginLeft: '+=50'
  8. }, 1000, function() {
  9. alert('Zrobiłem to tylko taz i więcej nie robie');
  10. });
  11. });
  12. $("#box2").one("mouseenter", function() {
  13. $(this).animate({
  14. marginTop: '+=50'
  15. }, 1000, function() {
  16. alert('Zrobiłem to tylko taz i więcej nie robie');
  17. });
  18. });
  19. });
  20. </head>
  21. <div id="box" style="display: block; flaot: left; width: 100px; height: 100px; background: green; text-align: center; color: #fff;">Jak klikne tylko raz</div>
  22. <div id="box2" style="display: block; flaot: left; width: 100px; height: 100px; background: blue; text-align: center; color: #fff;">Jak najazde tylko raz</div>
  23. </body>
  24. </html>


Live wink.gif

Ten post edytował Arcioch 3.10.2012, 22:41:41
Go to the top of the page
+Quote Post
sowiq
post
Post #3





Grupa: Zarejestrowani
Postów: 1 890
Pomógł: 339
Dołączył: 14.12.2006
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


@Dominator, domyślam się, że Twój skrypt wrzucony jest gdzieś w sekcji <head />. Znaczy to, że podczas jego wykonywania nie ma jeszcze drzewa DOM dokumentu, czyli nie istnieje $(".box"), przez co animacja nie jest wykonywana, a tym samym funkcja po jej skończeniu (w niej ustawiasz wartość zmiennej). Zainteresuj się metodą ready().

Inna rzecz, że jeśli wklejony przez Ciebie kod jest zamknięty w jakiejś funkcji, to za każdym jej wywołaniem, przed sprawdzeniem warunku ustawiasz wartość used na 0.

Ten post edytował sowiq 3.10.2012, 22:51:58
Go to the top of the page
+Quote Post
Dominator
post
Post #4





Grupa: Zarejestrowani
Postów: 565
Pomógł: 15
Dołączył: 11.10.2010

Ostrzeżenie: (20%)
X----


Cytat(Arcioch @ 3.10.2012, 23:38:26 ) *
Odpowiadam smile.gif Przeanalizuj i dostosuj smile.gif szkoda pisać koło na nowo smile.gif

  1. <!DOCTYPE html>
  2. <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
  3. <script type="text/javascript" src="http://code.jquery.com/jquery-1.8.1.min.js"></script>
  4. $(function(){
  5. $("#box").one("click", function() {
  6. $(this).animate({
  7. marginLeft: '+=50'
  8. }, 1000, function() {
  9. alert('Zrobiłem to tylko taz i więcej nie robie');
  10. });
  11. });
  12. $("#box2").one("mouseenter", function() {
  13. $(this).animate({
  14. marginTop: '+=50'
  15. }, 1000, function() {
  16. alert('Zrobiłem to tylko taz i więcej nie robie');
  17. });
  18. });
  19. });
  20. </head>
  21. <div id="box" style="display: block; flaot: left; width: 100px; height: 100px; background: green; text-align: center; color: #fff;">Jak klikne tylko raz</div>
  22. <div id="box2" style="display: block; flaot: left; width: 100px; height: 100px; background: blue; text-align: center; color: #fff;">Jak najazde tylko raz</div>
  23. </body>
  24. </html>


Live wink.gif


Dzięki za kod, lecz nie chcę, aby coś się wykonało po kliknięciu bądź najechaniu tylko samym wywoływaniu.
Go to the top of the page
+Quote Post
Arcioch
post
Post #5





Grupa: Zarejestrowani
Postów: 324
Pomógł: 110
Dołączył: 18.09.2012

Ostrzeżenie: (0%)
-----


Coś takiego spróbuj LINK smile.gif Wtedy dajesz one jako zwykła funkcja bez eventów smile.gif
Go to the top of the page
+Quote Post
Dominator
post
Post #6





Grupa: Zarejestrowani
Postów: 565
Pomógł: 15
Dołączył: 11.10.2010

Ostrzeżenie: (20%)
X----


W tym przypadku one() już nie działa http://jsfiddle.net/GZmEj/4/
Go to the top of the page
+Quote Post
sowiq
post
Post #7





Grupa: Zarejestrowani
Postów: 1 890
Pomógł: 339
Dołączył: 14.12.2006
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


@Arcioch, jesteś kolejną osobą utrudniającą sobie życie / mieszającą w głowach mniej doświadczonym.

Jaki sens ma umieszczanie metody one() w funkcji, która jest wykonywana na event 'ready'? Że niby będzie zabezpieczała przed kolejnym eventem 'ready', czy jak? Bo może czegoś nie czaję.

[edit]
@autor
Kod
$("button").one('click', shower);


Ten post edytował sowiq 4.10.2012, 15:16:13
Go to the top of the page
+Quote Post
Arcioch
post
Post #8





Grupa: Zarejestrowani
Postów: 324
Pomógł: 110
Dołączył: 18.09.2012

Ostrzeżenie: (0%)
-----


@Sowiq w tym przypadku masz rację moje niedopatrzenie smile.gif jednak też niedawno zacząłem moją przygodę z jQuery i jeszcze robię takie głupie błędy niestety ;/ Dzięki za zwrócenie na to uwagi wink.gif
Go to the top of the page
+Quote Post
sowiq
post
Post #9





Grupa: Zarejestrowani
Postów: 1 890
Pomógł: 339
Dołączył: 14.12.2006
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


@Arcioch, spoko, człowiek uczy się całe życie.

Jeszcze jedna uwaga do Twojego przykładu. Metody one() nie można zastosować tak jak napisałeś: $(element).one().cokolwiek(). Co prawda jQuery jest na tyle elastyczne, że nie wyrzuci błędu, ale ta metoda nie zrobi absolutnie nic. Według tego, co mówi opis API, metoda ta przyjmuje dwa obowiązkowe argumenty - events i handler + opcjonalny data.

Ale to tylko tak w ramach uściślenia.
Go to the top of the page
+Quote Post
Arcioch
post
Post #10





Grupa: Zarejestrowani
Postów: 324
Pomógł: 110
Dołączył: 18.09.2012

Ostrzeżenie: (0%)
-----


@Sowiq dzięki za rady wink.gif

Wracając do tematu Dominator poradziłeś sobie? wink.gif
Go to the top of the page
+Quote Post
Dominator
post
Post #11





Grupa: Zarejestrowani
Postów: 565
Pomógł: 15
Dołączył: 11.10.2010

Ostrzeżenie: (20%)
X----


Nadal nie poradziłem sobie.
Go to the top of the page
+Quote Post
sowiq
post
Post #12





Grupa: Zarejestrowani
Postów: 1 890
Pomógł: 339
Dołączył: 14.12.2006
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


@Dominator, pokaż swoją całą funkcję, której działanie chcesz blokować. Bo jeśli jest to cały kod z Twojego pierwszego postu, to w linijce 2. i tak ustawiasz 'used' za każdym razem na '0'.
Go to the top of the page
+Quote Post
Dominator
post
Post #13





Grupa: Zarejestrowani
Postów: 565
Pomógł: 15
Dołączył: 11.10.2010

Ostrzeżenie: (20%)
X----


@sowiq, tak obecnie prezentuje się kod:

  1. function createElement()
  2. {
  3. $(".box").one().animate({
  4. marginTop: '+=1px'
  5. }, 500, function()
  6. {
  7. $(".status").slideToggle();
  8. });
  9. }


Chcę, aby funkcję createElement() można wywołać tylko raz.
Go to the top of the page
+Quote Post
sowiq
post
Post #14





Grupa: Zarejestrowani
Postów: 1 890
Pomógł: 339
Dołączył: 14.12.2006
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Kod
var functionRan = false;

function createElement(){
    if(functionRan){
        return false;
    }
    $(".box").animate({marginTop: '+=1px'}, 500, function(){
        $(".status").slideToggle();
    });

    functionRan = true;
    return true;
}


Z Bogiem.
Go to the top of the page
+Quote Post
Dominator
post
Post #15





Grupa: Zarejestrowani
Postów: 565
Pomógł: 15
Dołączył: 11.10.2010

Ostrzeżenie: (20%)
X----


Działa, bardzo dziękuję za fachową pomoc smile.gif
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 19.08.2025 - 14:37