Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JQuery] Wyciągnięcie zmiennej z funkcji.
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
nuffin
Witam.
Może jest ktoś na forum, kto potrafi mi pomóc z wyciągnięciem zmiennej za funkcję.
Oto przykładowy kod:

  1.  
  2. var wcisniety;
  3.  
  4. $(document).bind('keypress', function(event) {
  5.  
  6. wcisniety = event.which;
  7.  
  8. });
  9.  


Kod oczekuje wciśnięcia klawisza i za pomocą zmiennej wcisniety zwraca kod ASCII klawisza, który naciśnięto. Jednak nie bardzo mam pomysł jak wyrzucić ją poza funkcję.

Ktoś ma pomysł?
lord2105
return wcisniety;?
nuffin
No niestety nie!

Chyba... wczoraj w nocy, fakt faktem już mało kumający, ale pierwsze co zrobiłem to tak właśnie próbowałem ją zwrócić i niestety nie poszło : /

Zaraz spróbuje o trzeźwym umyśle.

@EDIT:

Tak jak mówiłem, nie działa. Tutaj taki przykład:

  1.  
  2. var wcisniety;
  3.  
  4. $(document).bind('keypress', function(event) {
  5.  
  6. wcisniety = event.which;
  7.  
  8. $(.dispObj).text(wcisniety);
  9.  
  10. });
  11.  


* przy czym klasa .dispObj to klasa jakiegoś obiektu, np. diva.

Ten przykład zadziała i wyświetli kod ASCII klawisza, który wcisnęliśmy, jednak gdy funkcję$(.dispObj).text(wcisniety); umieścimy poza klamrami function(event); już nie działa : (

Niedziałająca wersja:

  1.  
  2. var wcisniety;
  3.  
  4. $(document).bind('keypress', function(event) {
  5.  
  6. wcisniety = event.which;
  7.  
  8. return wcisniety;
  9.  
  10. });
  11.  
  12. $(.dispObj).text(wcisniety);
  13.  
aart3k
To co napisałeś działa:
Kod
    var wcisniety;

$(document).ready(function() {

    $(document).bind('keypress', function(event) {

    wcisniety = event.which;
    console.log(wcisniety);

    });

});


$(document).click(function() {

        console.log(wcisniety);

});


W zmiennej wcisniety jest przechowywany ostatnio wciśnięty przycisk.
nuffin
A spróbuj wywołać jakąś funkcję, której atrybutem będzie funkcja wciśnięty...

Nie działa, a o to mi głównie chodzi : /
AdIoS_Neo
[JAVASCRIPT] pobierz, plaintext
  1. $(document).ready(function(){
  2. var wcisniety;
  3. $(document).bind('keypress', function(event) {
  4. wcisniety = event.which;
  5. });
  6.  
  7. $("#wciskane").click(function(){
  8. $("#wcisnij").html(wcisniety);
  9. });
  10. });
[JAVASCRIPT] pobierz, plaintext

Mi to działa... jeśli po wczytaniu strony pokazuje Ci że zmienna wcisniety "ma wartość" undefined to jest to poprawne działanie, bo nie został jeszcze żaden przycisk wciśnięty, a co za tym idzie zmienna wcisniety nie została zainicjowana czyli nie została jej nadana żadna wartość.
nuffin
Bardzo możliwe, że coś robię źle. Może wytłumaczę o co mi w ogóle chodzi.

  1.  
  2. $(document).bind('keypress', function(event) {
  3.  
  4. wcisniety = event.which;
  5.  
  6. });
  7.  
  8. innaFunkcja(wcisniety);


Chcę, by po odebraniu przez tą funkcję klawisza, który wcisnęliśmy, inna funkcja przejęła klawisz i wykonała jakąś czynność.

Niestety nie mogę kodu tej funkcji wprowadzić w funkcje anonimową function(); bo w momencie gdy przytrzymam dany klawisz funkcja zacznie się wykonywać wiele razy, a chcę by wykonała się tylko jeden raz. Czy ma ktoś pomysł na wykonanie tego zadania?

Dzięki z góry...
AdIoS_Neo
Chcesz by funkcja wykonywała się dla pojedynczych znaków np. dla wciśnięć -> mnsalw12z 4
a nie dla -> mmmmnnnssseee44111222 ?
Jeśli tak to oto rozwiązanie:
[JAVASCRIPT] pobierz, plaintext
  1. $(document).ready(function(){
  2. var wcisniety,old=0;
  3. $(document).bind('keypress', function(event) {
  4. wcisniety = event.which;
  5. (function(){
  6. if(wcisniety == old)
  7. return;
  8. else{
  9. old = wcisniety;
  10. $("#wcisnij").get(0).innerHTML += " "+wcisniety; // czyli zrób coś ....
  11. }
  12. })();
  13. });
  14. });
[JAVASCRIPT] pobierz, plaintext
aart3k
Generalnie to nie myślisz wielowątkowo tongue.gif


Kod
$(document).bind('keypress', function(event) {

// tutaj zaczyna sie obsluga wydarzenia "wcisniety przycisk"

wcisniety = event.which;
innaFunkcja(wcisniety);


// tutaj konczy

});

// tutaj jakies totalnie inne rzeczy sie dzieja jak np. przypisane obslugi innych zdarzen etc.
Crozin
Gwoli ścisłości: JavaScript (a dokładniej window.setTimeout() i window.setInterval()) nie obsługuje wielowątkowości, mimo iż może powstać takie wrażenie.

W tym przykładzie wydaje się jakbyśmy mieli dostęp do wielowątkowości http://jsfiddle.net/pQcAq/ ale tutaj już widać, że całość działa w oparciu o jeden wątek http://jsfiddle.net/pQcAq/1/
Zdarzenia pochodzące od użytkownika (kliknięcia itp.) też są wywoływane w tym samym wątku.

Pamiętajcie, że setTimeout/Interval gwarantują jedynie to, że dany kod nie zostanie wywołany wcześniej niż za X sekund, a nie, że zostanie wywołany za właśnie tyle.
nuffin
Adios Neo: Wielkie dzięki, bo Twój skrypt rozwiązuje już sporą część mojego problemu. Jednak wolałbym by klawisz był odczytywany tylko co 150 ms, lub po zakończeniu działania funkcji... nie bardzo kminie jak, ponieważ dopiero zacyznam i przytłacza mnie ta asynchroniczność : /
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.