![]() |
![]() ![]() |
![]() |
![]() ![]()
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:
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ł? |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 380 Pomógł: 59 Dołączył: 24.04.2010 Skąd: London Ostrzeżenie: (0%) ![]() ![]() |
return wcisniety;?
-------------------- |
|
|
![]()
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:
* 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:
Ten post edytował nuffin 14.12.2010, 16:29:35 |
|
|
![]()
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. |
|
|
![]()
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 : / |
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 159 Pomógł: 43 Dołączył: 8.03.2009 Ostrzeżenie: (0%) ![]() ![]() |
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ść. |
|
|
![]()
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.
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... |
|
|
![]()
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:
Ten post edytował AdIoS_Neo 15.12.2010, 03:45:53 |
|
|
![]()
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
![]() 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. |
|
|
![]()
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. |
|
|
![]()
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ść : /
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 20.08.2025 - 19:46 |