Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JavaScript] Wyciąganie z input do zmiennej
Forum PHP.pl > Forum > Przedszkole
php__amator
Witajcie drodzy przedszkolacy smile.gif

Tak sobie walczę z JSem od pewnego czasu, co napotkam jakiś problem to pytam jak przystało na przedszkolaka.

UWAGA !

W moim skrypcie zmienna odpowiadająca za wybór formy elementu jest uzależniona od tego na którym w danym momencie znajduje się focus.
Z tego inputa muszę wyciągnąć nazwę lub wartość i zmienna musi tę wartość dostać. Wartość zmiennej podstawiona do skryptu pozwala wybrać odpowiedni blok danych.

Jak powinno to wyglądać ?

Próbuję getElementById, getElementByName ale wciąż moja zmienna świeci pustką sad.gif
Nie wiem jak mam to zrobić sad.gif

Podpowiedzcie proszę.

Zdaję sobie sprawę, że to co poniżej to jakaś bzdura ale niech tam, wymyśliłem coś takiego:
[JAVASCRIPT] pobierz, plaintext
  1. var layout = function () {
  2. input.class = _input;
  3. input.name();
  4. document.write(layout);
  5. };
[JAVASCRIPT] pobierz, plaintext


i takie coś:

[JAVASCRIPT] pobierz, plaintext
  1. var layout = function () {
  2. document.getElementsById().innerHTML =
  3. document.getElementsById().name;
  4. document.write(layout);
  5. };
[JAVASCRIPT] pobierz, plaintext

ale skutek jest taki, że pokazuje mi tylko sformatowanego div'a i nic wewnątrz sad.gif
Proszę o wyrozumiałość jam jest tylko js amator
dopiero zaczynam :")
Turson
.val()

w getElementById() musisz w nawiasie podać to id
Sephirus
Pomimo odpowiedzi przedmówcy prosił bym o lepsze rozpisanie tematu bo w sumie nie do końca rozumiem. Napisz po kolei co dokładnie chcesz uzyskać i jak to ma działać.

Kod który przedstawiłeś faktycznie nie ma sensu za bardzo...
trueblue
Cytat(phpamator @ 4.04.2014, 00:47:22 ) *
W moim skrypcie zmienna odpowiadająca za wybór formy elementu jest uzależniona od tego na którym w danym momencie znajduje się focus.
Z tego inputa muszę wyciągnąć nazwę lub wartość i zmienna musi tę wartość dostać. Wartość zmiennej podstawiona do skryptu pozwala wybrać odpowiedni blok danych.

Nie ma metody getElementsById, bo z założenia każdy element ma unikalne ID.
Zakładam, że robisz to w czystym JS.
Możesz to zrobić na dwa sposoby:
- w HTML5 masz metodę na dokumencie: document.activeElement, możesz sprawdzić czy to input tekstowy, pobrać wartość,
- możesz też pobrać wszystkie inputy metodą getElementsByTagName, w pętli sprawdzić czy typ to text, przypiąć zdarzenia na focus oraz blur i w zdarzeniach przypisywać do zmiennej wartości z pól. (W czystym JS zdarzenia przypinamy inaczej w IE: http://msdn.microsoft.com/en-us/magazine/ff728624.aspx)
php__amator
Cytat(Turson @ 4.04.2014, 07:35:57 ) *
.val()

w getElementById() musisz w nawiasie podać to id

  1.  
  2. <script type="text/javascript">
  3. window.onload = function () {
  4. jsKB('keys');
  5. jsKB('kb_button2');
  6. }
  7. </script>
  8.  
  9. </head>
  10. <body>
  11. <div id="wrapper">
  12. <div id="main">
  13.  
  14. <div class="separate">
  15. Extended <input class="extended" type="text" id="keys1" name="extended"/>
  16. <div class="separate">
  17. Letters and digits <input class="full" type="text" id="keys2" name="full"/>
  18. <div class="separate">
  19. Digits <input class="half" type="text" id="keys3" name="half"/>
  20. <div class="separate">
  21. <textarea id="kb_area" rows="8" cols="30"></textarea><img src="kb.png"
  22.  
  23. id="kb_button2" name="full" alt="keyboard button"/>
  24. </div>
  25. </div>
  26. </div>
  27. </div>
  28. </div>
  29. </div>
  30.  


[JAVASCRIPT] pobierz, plaintext
  1. ...
  2. var layout = function () {
  3. document.getElementsById().innerHTML =
  4. document.getElementsById('keys').name;
  5. document.write(layout);
  6. };
  7. ...
[JAVASCRIPT] pobierz, plaintext
Turson
Nie możesz mieć tego samego id więcej niż raz...
php__amator
Pomijajac ID, jak to zrobic ?
Zalozmy, ze id dla kazdego bedzie inne, w tym wypadku lepiej byloby pobrac nazwe i wartosc albo klase
Turson
Ale co ty chcesz zrobić? Pierwszy post jakiś niejasny
php__amator
Wyjasniam:

na stronie mam dwa inputy

  1. pierwszy do wprowadzania ilosci tylko cyfry <input id="half" value="half">
  2. drugi do wprowadzania kodow cyfry i litery <input id="full" value="full">


zaleznie od tego ktory jest focus zmienna keys przyjmuje wartosc z value inputa i wlacza sie odpowiedni modul klawiatury.
Turson
jquery
[JAVASCRIPT] pobierz, plaintext
  1. $("#half").on('focus', function(){
  2. //akcja
  3. })
[JAVASCRIPT] pobierz, plaintext

analogicznie dla #full
php__amator
$("#half").on('focus', function(){
var layout = half;
});
questionmark.gif
Turson
facepalmxd.gif
jeżeli chcesz wyciągnąc value, to var layout = $(this).val();
php__amator
facepalmxd.gif


$("#half").on(focus, function(){
var layout = $this().val();
});
jesli value

a jesli name ?
$("#half").on('focus', function(){
var layout = $this().attr('name');
});
Turson
$(this)
$this()
widzisz różnicę?
Odpal konsolę przeglądarkową najlepiej, to zobaczysz błąd od razu
php__amator
facepalmxd.gif

D.U. .A.

formularz

  1. <script type="text/javascript" src="../jskb.js"></script>
  2. <script type="text/javascript">
  3. window.onload = function () {
  4.  
  5. jsKB('full');
  6. jsKB('half');
  7. jsKB('extended');
  8. jsKB('kb_area','kb_button2');
  9. }
  10. </script>
  11.  
  12.  
  13.  
  14. </head>
  15. <body>
  16. <div id="wrapper">
  17. <div id="main">
  18.  
  19. <div class="separate">
  20. Letters and digits <input id="full" name="full" value="">
  21. <div class="separate">
  22. Letters and digits <input id="half" name="half" value="">
  23. <div class="separate">
  24. Letters and digits <input id="extended" name="extended" value="">
  25. <div class="separate">
  26. <textarea id="kb_area" rows="8" cols="30"></textarea><img src="kb.png" id="kb_button2" name="full" alt="keyboard button"/>
  27. </div>
  28.  
  29. </div>
  30. </div>
  31. </div>
  32. </body>


skrypt z zewnetrznego pliku (oczywiscie tylko fragment)


[JAVASCRIPT] pobierz, plaintext
  1.  
  2. ...
  3. $("#full").on('focus', function(){
  4. var layout = $(this).name(); /* tu spodziewam sie, ze zmienna layout przyjmie wartosc name z input'a */
  5. });
  6. $("#full").on('focus', function(){
  7. var layout = $(this).var(); /* tu spodziewam sie, ze zmienna layout przyjmie wartosc value z input'a */
  8. });
  9. ...
  10.  
[JAVASCRIPT] pobierz, plaintext


i dalej ... nie moge uzyskac oczekiwanego efektu sad.gif
trueblue
Wcześniej pobierałeś poprawnie zarówno name i value.
Tyle, że od $this().
php__amator
W teorii powinno być ok. Praktyka jednak wygląda inaczej.
Poszedłem za waszymi uwagami. Obczytałem się na jquery
wklepałem zgodnie z zaleceniem i .....
D.U. .A.
[JAVASCRIPT] pobierz, plaintext
  1.  
  2. $("#half").on('focus', function(){ /* w tym wypadku var layout = half */
  3. var layout = $(this).attr('name');
  4. });
  5.  
  6. $("#full").on('focus', function(){ /* w tym wypadku var layout = full */
  7. var layout = $(this).attr('name');
  8. document.writeln(layout);
  9. });
  10.  
  11. $("#extended").on('focus', function(){ /* w tym wypadku var layout = extended */
  12. var layout = $(this).attr('name');
  13. document.writeln(layout);
  14. });
  15.  
[JAVASCRIPT] pobierz, plaintext

I może i się równa ale nijak nie wiem jak to sprawdzić bo gdy chcę wyświetlić
document.write(layout);
pokazuje mi NIC
a w konsoli Chrome'a
Uncaught ReferenceError: layout is not defined jskb.js:184
generateKeys jskb.js:184
keyboard jskb.js:432
(anonymous function) jskb.js:482
window.onload
bo faktycznie w chwili ładowania layout'u niema jeszcze, dopiero gdy kliknę na input
powinna pojawić się jakaś wartość w tej zmiennej.
Nie wiem co z tym zrobić sad.gif
jeśli natomiast ustawię val layout = ''
błąd znika ale gdy kliknę na input dalej nic się nie dzieje a powinna pojawić się klawiatura określonego typu.
Turson
http://jsfiddle.net/84EvX/
Może nie podczepiłeś biblioteki jquery?
trueblue
Piszesz o document.writeln(layout), które zawarłeś w funkcjach onFocus?
Bo jeśli z innego miejsca próbujesz wyświetlić zmienną "layout", to powinna być globalna, obecnie w każdej z tych funkcji deklarujesz ją jako zmienną lokalną.
Usuń "var" z funkcji onFocus.
php__amator
Turson: jquery podłączone i na 100% działa.

TruBlue: czy usunę var czy nie, efekt ten sam smile.gif

Wrzucę kod na serwer, W ten sposób będziemożna zobaczyć co się dzieje smile.gif

http://roberta.uznam.net.pl/czysta/demo/

Jak klikniesz na input albo konkę klawiatury pojawić się powinien sformatowany <div>

ale ponieważ var layout = '' jest pusty.
trueblue
Coś pomieszałeś.
Do zmiennej layout przypisujesz string, a potem traktujesz ją jak tablicę: for (var i=0; i < layout.length; i++) {
php__amator
Czekaj, wyjaśniam.
layout to zmienna w której pierwotnie zapisane było to co w tej chwili jest w keytables.js jako var extended, var full i var half
to jak zauważyłeś trzy rózne zestawy klawiszy (klawiatury ekranowej)
moim zamiarem jest nie zmieniając niczego w kodzie poza wartością jaka ma być przyjmowana w zmiennej layout i na tej podstawie ma byc wybierana klawiatura
czyli var layout = var extended czy var full albo var half zależnie od tego w który input klepniesz.

tak wyglądało wcześniej. Wartość layout wyglądała tak:
[JAVASCRIPT] pobierz, plaintext
  1. ...
  2. var layout = [
  3. ['`','~'],['1','!'],['2','@'],['3','#'],['4','$'],['5','%'],['6','^'],['7','&'],['8','*'],['9','('],['0',')'],['-','_'],['+','='],['BackSp'],
  4. ['Tab'],['q','Q'],['w','W'],['e','E','e','E'],['r','R'],['t','T'],['y','Y'],['u','U'],['i','I'],['o','O','ó','Ó'],['p','P'],['[','{'],[']','}'],['\\','|'],
  5. ['CapsLk'],['a','A','a','A'],['s','S','s','S'],['d','D'],['f','F'],['g','G'],['h','H'],['j','J'],['k','K'],['l','L','l','L'],[';',':'],['\'','"'],['Enter'],
  6. ['Shift'],['z','Z','z','Z'],['x','X','z','Z'],['c','C','c','C'],['v','V'],['b','B'],['n','N','n','N'],['m','M'],[',','<'],['.','>'],['/','?'],['Shift'],
  7. ['Space'],['Alt']
  8. ];
  9. ...
[JAVASCRIPT] pobierz, plaintext



więc żeby zależnie od tego który input jest 'focus' odpala się odpowiednia do niego klawiaturka.


w sumie wywaliłem te układy klawiszy do osobnego, żeby było mi wygodniej je edytować
można to poźniej spowrotem wrzucić do jskb.js

mam nadzieję, że w miarę czytelnie opisałem o co mi chodzi ?

Reasumując jeśli podstawię do zmiennej var layout = "nazwa zmiennej z keytables.js" np full to mi wyświetla klwiature ze zmiennej var full i tak jest ok, jeśli zmienię na var layout = half pokazuje klawiature ze zmiennej half czyli same cyfry a jesli bede chciał wyświetlić pełną klawiaturę
wtedy zmienna var layout = extended.

Działa jeśli podstawiam ręcznie sad.gif
trueblue
Wiem co namieszałeś i co chciałeś osiągnąć.
Może ten krótki przykład Cię naprowadzi:
  1. var kbLayouts={
  2. 'extended': [
  3. ['`','~'],['1','!'],['2','@'],['3','#'],['4','$'],['5','%'],['6','^'],['7','&'],['8','*'],['9','('],['0',')'],['-','_'],['+','='],['BackSp'],
  4. ['Tab'],['q','Q'],['w','W'],['e','E','e','E'],['r','R'],['t','T'],['y','Y'],['u','U'],['i','I'],['o','O','ó','Ó'],['p','P'],['[','{'],[']','}'],['\\','|'],
  5. ['CapsLk'],['a','A','a','A'],['s','S','s','S'],['d','D'],['f','F'],['g','G'],['h','H'],['j','J'],['k','K'],['l','L','l','L'],[';',':'],['\'','"'],['Enter'],
  6. ['Shift'],['z','Z','z','Z'],['x','X','z','Z'],['c','C','c','C'],['v','V'],['b','B'],['n','N','n','N'],['m','M'],[',','<'],['.','>'],['/','?'],['Shift'],
  7. ['Space'],['Alt']
  8. ],
  9.  
  10. 'full' : [
  11. ['A'],['B'],['C'],['D'],['E'],['F'],['G'],['H'],['I'],['J'],['K'],['L'],['M'],['N'],['1'],['2'],['3'],['4'],['5'],['6'],['7'],['8'],['9'],['0'],['BackSp']
  12. ],
  13.  
  14. 'half':[
  15. ['1'],['2'],['3'],['4'],['5'],['6'],['7'],['8'],['9'],['0'],['BackSp']
  16. ]};
  17.  
  18. alert(kbLayouts['half']);
php__amator
hmmm, nie bardzo mnie naprowadziło ale, ciekawe rozwiązanie.
[JAVASCRIPT] pobierz, plaintext
  1.  
  2. var layout ;
  3. layout =
  4. $(this).on('focus', function(){
  5. keylayouts = $(this).attr('name');
  6. });
  7.  
[JAVASCRIPT] pobierz, plaintext

teraz dla odmieny pojawia mi się <div> z jedny przyciskiem opisanym jako undefined smile.gif
trueblue
To był przykład. Wyrzuć ten alert.

Początek tak:
  1. var layout ;
  2. $(this).on('focus', function(){ //tu osobna obsługa zdarzenia dla każdego pola (tak jak miałeś wcześniej)
  3. layout = $(this).attr('name');
  4. });
  5.  
  6. var shift = false;
  7. var alt = false;
  8. //document.write(name); //do wywalenia


Teraz jeśli focus ma textarea, to w layout jest wartość 'extended' i aby odwołać się do definicji klawiszy 'extended', to: keylayouts[layout] (analogicznie będzie dla pozostałych układów klawiatury).
php__amator
Cytat(trueblue @ 5.04.2014, 15:25:48 ) *
To był przykład. Wyrzuć ten alert.

Początek tak:
  1. var layout ;
  2. $(this).on('focus', function(){ //tu osobna obsługa zdarzenia dla każdego pola (tak jak miałeś wcześniej)
  3. layout = $(this).attr('name');
  4. });
  5.  
  6. var shift = false;
  7. var alt = false;
  8. //document.write(name); //do wywalenia


Teraz jeśli focus ma textarea, to w layout jest wartość 'extended' i aby odwołać się do definicji klawiszy 'extended', to: keylayouts[layout] (analogicznie będzie dla pozostałych układów klawiatury).


Kurcze, jak sprawdzam działanie na jsfiddle to wszystko pięknie
a jak to samo zrobię u siebie ... kicha. nie czaję ... ;(
trueblue
Za każdym razem coś "psujesz".

Zamiast:
  1. var layout = keylayout;
  2.  
  3. var keylayout;
  4. $(this).on('focus', function(){
  5.  
  6. $("#full").on("focus", function(){
  7. var keylayout = $(this).attr('id');
  8. });
  9.  
  10. $("#half").on("focus", function(){
  11. var keylayout = $(this).attr('name');
  12. });
  13.  
  14. $("#extended").on("focus", function(){
  15. var keylayout = $(this).attr('name');
  16. });
  17. });


  1. var layout; //puste, bo do tego będą spływać wartości
  2.  
  3.  
  4. $("#full").on("focus", function(){
  5. layout = $(this).attr('id'); //moze być id, ale abyś pamiętał, żeby go nie usuwać z html
  6. });
  7.  
  8. $("#half").on("focus", function(){
  9. layout = $(this).attr('name');
  10. });
  11.  
  12. $("#extended").on("focus", function(){
  13. layout = $(this).attr('name');
  14. });
php__amator
Nie mogę się skupić i nic mi nie idzie dzisiaj.
Raz zrobię jak piszesz, pokazuje w alertach co wybrałem, drugi raz zrobię to samo, nie pokazuje, tracę cierpliwość już do tego smile.gifsmile.gif

Teraz dla odmiany, nie pokazuje niczego
nawet alerty sie nie pokazują ....

Nie wiem co może być powodem, nawet jeśli wszystko jest OK,
Jeśli ręcznie podstawiam nazwe zmiennej wszystko jest ok a jesli próbuję wyciagnac
prze z jquery ni ...chuchu

....
Zastosowalem sie bardzo szczególowo do podanych informacji i nic.


Nadszedł weekend, czas powalczyć/

W tygodniu nie miałem zbyt wiele czasu aby posiedzieć na forum, zamierzam więc to nadrobić.
Jakoś do tej pory nie znalazłem sposobu na zmuszenie do działania tego ..... skryptu smile.gif
W dalszym ciągu próbuję. Testuję na jsfiddle i teoretycznie wszystko jest ok, wszystko dziala, po wrzuceniu do skryptu przestaje i nawet nie pojawiają się alerty co mnie zastanawia.

http://jsfiddle.net/GF2jM/14/

dokladnie tak zrobilem i tutaj dziala, czego dowodem jest alert potwierdzajacy wykonanie.
Jesli teraz podstawie to do skryptu przestaje dzialac.
Teraz jeśli pobrany name inputa zostanie przekazany do zmiennej layout to w wyniku tego powinnien zostac wyświetlony element tablicy o takim name lub numer.
tak przynajmniej kopmbinuje.
Reasumująć:
Ponawiam pytanie i prośbę o wsparcie albo może coś więcej niż tylko podpowiedź.
[JAVASCRIPT] pobierz, plaintext
  1. var layout = keylayout;
  2.  
  3. $("#half").on("focus", function(){ /* w chwili wyboru input "half" powinna zostac włączona klawiaturka 1 */
  4. keylayout = $(this).attr('name');
  5. alert(keylayout);
  6. });
  7. $("#full").on("focus", function(){ /* w chwili wyboru input "full" powinna zostac włączona klawiaturka 2 */
  8. keylayout = $(this).attr('name');
  9. alert(keylayout);
  10. });
  11. $("#maxi").on("focus", function(){ /* i w chwili wyboru input "maxi" powinna zostac włączona klawiaturka 3 */
  12. keylayout = $(this).attr('name');
  13. alert(keylayout);
  14. });
  15.  
[JAVASCRIPT] pobierz, plaintext

Co robię źle ?
pozdrawiam
php/js amator
trueblue
Najlepiej gdybyś pokazał oryginalny skrypt, który generował wszystkie 3 rodzaje klawiatur.
php__amator
podeślę ci na PW ok ?

w pierwotnej formie skrypt generował¾ tylko jedną klawiature wink.gif
dopiero niedawno wpadłem na pomysł, żeby go zmodyfikować i mieć możliwość wyboru
jeśli np wybiore keylayout[1] to taka jesli keylayout[2] to inna itd.
w sumie to jak na stale wpiszę, że layout = keylayout[1] to mi wyswietli co chcę ale chciałbym aby to się pojawialo (klawisze) jak kustawie focus na odpowiedni input

http://jsfiddle.net/GF2jM/25/
tu działa pięknie
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.