Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [JQuery] Wyciągnięcie zmiennej z funkcji., $(document).bind('keypress', function(););
nuffin
post
Post #1





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 14.12.2010

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


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ł?
Go to the top of the page
+Quote Post
lord2105
post
Post #2





Grupa: Zarejestrowani
Postów: 380
Pomógł: 59
Dołączył: 24.04.2010
Skąd: London

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


return wcisniety;?


--------------------
40% rozwiązań znajduje się tutaj.
59,9% tutaj.

Jeśli pomogłem rozwiązać Twój problem wciśnij
Go to the top of the page
+Quote Post
nuffin
post
Post #3





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 14.12.2010

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


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.  


Ten post edytował nuffin 14.12.2010, 16:29:35
Go to the top of the page
+Quote Post
aart3k
post
Post #4





Grupa: Zarejestrowani
Postów: 72
Pomógł: 10
Dołączył: 2.02.2008
Skąd: Kraków

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


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.
Go to the top of the page
+Quote Post
nuffin
post
Post #5





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 14.12.2010

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


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 : /
Go to the top of the page
+Quote Post
AdIoS_Neo
post
Post #6





Grupa: Zarejestrowani
Postów: 159
Pomógł: 43
Dołączył: 8.03.2009

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


[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ść.
Go to the top of the page
+Quote Post
nuffin
post
Post #7





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 14.12.2010

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


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...
Go to the top of the page
+Quote Post
AdIoS_Neo
post
Post #8





Grupa: Zarejestrowani
Postów: 159
Pomógł: 43
Dołączył: 8.03.2009

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


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


Ten post edytował AdIoS_Neo 15.12.2010, 03:45:53
Go to the top of the page
+Quote Post
aart3k
post
Post #9





Grupa: Zarejestrowani
Postów: 72
Pomógł: 10
Dołączył: 2.02.2008
Skąd: Kraków

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


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.
Go to the top of the page
+Quote Post
Crozin
post
Post #10





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


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.
Go to the top of the page
+Quote Post
nuffin
post
Post #11





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 14.12.2010

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


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ść : /
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: 20.08.2025 - 19:46