Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JavaScript] Błąd przy ustalaniu
Forum PHP.pl > Forum > Przedszkole
Dominator
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.
Arcioch
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
sowiq
@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.
Dominator
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.
Arcioch
Coś takiego spróbuj LINK smile.gif Wtedy dajesz one jako zwykła funkcja bez eventów smile.gif
Dominator
W tym przypadku one() już nie działa http://jsfiddle.net/GZmEj/4/
sowiq
@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);
Arcioch
@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
sowiq
@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.
Arcioch
@Sowiq dzięki za rady wink.gif

Wracając do tematu Dominator poradziłeś sobie? wink.gif
Dominator
Nadal nie poradziłem sobie.
sowiq
@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'.
Dominator
@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.
sowiq
Kod
var functionRan = false;

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

    functionRan = true;
    return true;
}


Z Bogiem.
Dominator
Działa, bardzo dziękuję za fachową pomoc smile.gif
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.