ugrás a tartalomhoz

billentyű leütés

cica · 2013. Feb. 24. (V), 10.57
Üdv!

Készítek egy egyszerű progit mégis gondom van vele.
Az a feladata, hogy kiírja melyik billentyűt nyomd le és azt kell tenni.
A probléma a text mező, szerintem nem felhasználóbarát. A Tab billentyűnél is elállítódik a fókusz. Többször bele kell kattintani a text mezőbe. A másik problémám az Enter leütésekor kezdi előröl. Miért? Lehetne text mező nélkül ezt?
A progit mellékelem.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title></title>
<script>
osz=0;rosszvalasz=0;
var tomb = new Array(		
new Array("Nyomd le a Backspace-t!", 8),	
new Array("Nyomd le a Tab-ot!", 9 ),	
//new Array("Nyomd le az Enter-t!", 13),
new Array("Nyomd le a Shift-et!", 16 ),	
new Array("Nyomd le a Ctrl-t!", 17),	
new Array("Nyomd le az Alt-ot!", 18),	
new Array("Nyomd le a Caps lock-ot!", 20),	
new Array("Nyomd le az Escape-t!", 27),	
new Array("Nyomd le a Page up-ot!", 33),	
new Array("Nyomd le a Page down-t!", 34),	
new Array("Nyomd le az End-et!", 35),	
new Array("Nyomd le a Home-t!", 36),		
new Array("Nyomd le a Bal nyilat!", 37),	
new Array("Nyomd le a Fel nyilat!", 38),	
new Array("Nyomd le a Jobbra nyilat!", 39),	
new Array("Nyomd le az Le!", 40)
)	
onload = function(){
 field = document.getElementById('number_field')
 field.onkeydown = keyhit
 field.focus()
}
function keyhit(e)
{
 if (e!=13){
 thisKey = e ? e.which : window.event.keyCode
 ell(thisKey) }
 }
function ell(press)
{
    max=tomb.length; 
	var ertekeles = 'helytelen'; 
	var kerdes = document.getElementById("bill").innerHTML;
	for ( i=0; i < tomb.length ; i++) {			
		if ((kerdes == tomb[i][0]) && (press == tomb[i][1])) { ertekeles = 'helyes';} 	}	
	if (ertekeles == 'helyes')
	  { osz+=10;
	  a++; 
	  document.getElementById("bill").innerHTML=tomb[a][0];
	}else {alert('Hibás válasz!'+press); rosszvalasz++;}
	if (a==max) {document.getElementById("bill").innerHTML="Vége"+a+' '+max ;}
}
</script>
</head>
<body bgcolor=ivory onbeforecopy="return false" oncontextmenu="return false" oncopy="return false" ondragstart="return false" onselect="return false" onselectstart="return false">
<center>
<h1><div id="bill" style="text-align:center; border:0px solid; padding:5px; width:100%; margin-left:auto; margin-right:auto;" ></h1>
<script>
a=0;
document.getElementById("bill").innerHTML=tomb[a][0];
</script>
<form action="" method="post">
<p><input type="text" id="number_field" name="number_field" value="HA NEM MEGY KATT IDE" size='30' maxlength='10'></p>
</form>
</center>
</body>
</html>
 
2

Alapok

Hidvégi Gábor · 2013. Feb. 24. (V), 11.30
A probléma a text mező
Nem, sajnos a probléma a hiányos tudásod. Ez persze nem gond, végső soron az, amit keresel, a javascript eseménykezelés, de azt javaslom, előbb tedd rendbe az alapokat, a kódod tele van hibával. Egy jó bevezetőre/tutorialra van szükséged első körben.

Biztos vagyok, hogy hamarosan kapsz kész megoldásokat is, de ne foglalkozz velük, mert inkább csak gondot okoz, nem fogod látni a "nagy képet".
3

hiba

cica · 2013. Feb. 24. (V), 11.33
Tudom hogy hibás ez még nem a végleges, csak ezeket nem tudtam javítani. Dolgozom rajta.
1

A Tab billentyűnél is

Poetro · 2013. Feb. 24. (V), 11.28
A Tab billentyűnél is elállítódik a fókusz.

Ez teljesen természetes. Erre való a Tab gomb.
A másik problémám az Enter leütésekor kezdi előröl.

Teljesen természetes, mivel ekkor elküldi a böngésző az űrlapot.

Mindkettőt meg lehet akadályozni azzal, hogy megakadályozod az események alapértelmezett működését:
function (event) {
  if (!event) {
    event = window.event;
  }
  if (event.preventDefault) {
    event.preventDefault();
  }
  else if ('returnValue' in event) {
    event.returnValue = false;
  }
}
Vagy egyszerűen az eseménykezelőből false értékkel térünk vissza.

Lehetne text mező nélkül ezt?

Természetesen lehet. Akkor viszont a document-en vagy a body-n figyeld a gombok leütését.

A new Array használata nem ajánlott, vannak ismert problémás esetei. Használd inkább a ["Nyomd le a Backspace-t!", 8] formát.
4

tovább

cica · 2013. Feb. 24. (V), 11.57
Gondolom ez segít.
<html><head><title>Teszt</title>
<script language="JavaScript">
window.captureEvents(Event.KEYPRESS);
window.onkeypress = kiad;
function kiad(Esemeny){
 alert("Ön megnyomta a   " + Esemeny.which + "   gombot");
 window.captureEvents(Event.KEYPRESS);
 window.onkeypress = kiad;
}
</script>
</head><body>
 Üssön le egy billentyűt!
</body></html>
6

A captureEvents függvényt

Poetro · 2013. Feb. 24. (V), 18.30
A captureEvents függvényt tanácsos elfelejteni, mert nem szabványos. Helyette addEventListener.
7

Egyébként ez a captureEvents

Karvaly84 · 2013. Feb. 24. (V), 18.45
Egyébként ez a captureEvents nem csak az IE 6 elötti időkben volt használatos? Mert 6 alatt úgy emlékszem ment az esemény kezelés ez nélkül is. Sajnos IE 6 hiányában nem volt szerencsém ki probálni de lehet te tudsz rá válaszolni: Elképzelhető, hogy az ugynevezett custom event-ek nem müködnek ez nélkül IE-ben?

szerk.: ja nem ie-ben volt hanem mozilla-ban, de a kérdésem attol még fennál a custom event-el kapcsolatban.
8

Attól függ, mit nevezel

Poetro · 2013. Feb. 24. (V), 22.27
Attól függ, mit nevezel custom eventnek. Létezik szabványos implementáció is, ami van IE9 / Fx6 / Chrome / O11.6 óta elérhetó a CustomEvent.
5

Érdekes módszerekkel

Karvaly84 · 2013. Feb. 24. (V), 17.32
Érdekes módszerekkel operálsz. Valahol van egy régi könyvem kezdőknek, a 24 órás sorozatból. Ne adjam oda?
9

off

cica · 2013. Feb. 25. (H), 09.06
Kösz az offot. Megmutattad ki vagy.
11

Ezt azt hiszem kissé

iddqd · 2013. Feb. 25. (H), 11.12
Ezt azt hiszem kissé félreértetted!
13

Sztem félre értesz, én oda

Karvaly84 · 2013. Feb. 25. (H), 18.09
Sztem félre értesz, én oda szerettem volna neked ajándékozni egy olyan kiadványt amiből pár alap dolgot el tudtál volna sajátítani. A kódod alapján, pl. ahogy a változókat deklarálod nekem az jött le, hogy nem megfelelő a felkészültséged. De ha rossz néven vetted akkor természetesen majd másnak adom.
14

félreértés

cica · 2013. Feb. 26. (K), 17.34
Azt hiszem félreértettelek.
10

Jó tett helyébe....

iddqd · 2013. Feb. 25. (H), 11.12
Jó tett helyébe....
12

var

Poetro · 2013. Feb. 25. (H), 11.34
Fontosnak tartom megjegyezni, hogy úgy tűnik a változóidat adhoc jelleggel inicializálod. Azaz van, amit inicializálsz var kulcsszóval, van, amit nem. Utóbbinak hatására a változó globális lesz, illetve a globális változó értékét módosítja, aminek lehetnek kellemetlen mellékhatásai. Ezért legjobb, ha minden változót, ami nem függvény argumentum, var kulcsszóval inicializálsz.

Fontos lenne, hogy a kódodat megfelelően, de legalább konzisztensen tagold, például hogy látszódjon, hol ér kezdődik egy if és hol végződik egy for ciklus.
15

Teljesen igazad van. El

cica · 2013. Feb. 26. (K), 19.30
Teljesen igazad van. El szoktam választani, de ezt csak egy kiindulópontnak szántam. Csak a vázat próbáltam bemutatni érdemes-e ezen az úton elindulni. Kiderült hogy nem. Dolgozom rajta (próbálkozom). Gondolom van aki pár perc alatt megoldja a problémát, nekem tovább tart.
Ha valaki megajándékozna egy kész progival megköszönném.


Mindenkinek köszi a segítséget.
16

Kész megoldást nem adok, de

Poetro · 2013. Feb. 26. (K), 22.32
Kész megoldást nem adok, de egy jó kezdést:
(function (d) {
  var body = d.body,
      keys = [
		//["Nyomd le a Backspace-t!", 8],
		["Nyomd le a Tab-ot!", 9 ],
		["Nyomd le az Enter-t!", 13],
		["Nyomd le a Shift-et!", 16 ],
		["Nyomd le a Ctrl-t!", 17],
		["Nyomd le az Alt-ot!", 18],
		//["Nyomd le a Caps lock-ot!", 20],
		["Nyomd le az Escape-t!", 27],
		["Nyomd le a Page up-ot!", 33],
		["Nyomd le a Page down-t!", 34],
		["Nyomd le az End-et!", 35],
		["Nyomd le a Home-t!", 36],
		["Nyomd le a Bal nyilat!", 37],
		["Nyomd le a Fel nyilat!", 38],
		["Nyomd le a Jobbra nyilat!", 39],
		["Nyomd le a Le nyilat!", 40]
      ],
      misses = 0,
      expected = -1,
      scoreElement,
      messageElement,
      score = 0;
  
  function keypressHandler(event) {
    var keyCode;
    if (!event) {
      event = window.event;
    }
    keyCode = event.which ? event.which : event.keyCode;
    if (expected >= keys.length || keyCode === keys[expected][1]) {
      nextQuestion();
    }
    else {
      misses += 1;
    }
    return false;
  }
  
  function nextQuestion() {
    expected += 1;
    alert('Kérdés: ' + (expected + 1));
    // TODO: implementálni
  }
  
  if (body.addEventListener) {
    body.addEventListener('keydown', keypressHandler, false);
  }
  else if (body.attachEvent) {
    body.attachEvent('onkeydown', keypressHandler);
  }
  else {
    body.onkeydown = keypressHandler;
  }
  
  nextQuestion();
})(document);
17

Köszi

cica · 2013. Már. 1. (P), 15.33
Szép munka. Köszi.

Hogyan tovább?
18

Haha

Hidvégi Gábor · 2013. Már. 1. (P), 15.58
Néha azért jól esne személyeskedni. Na, mindegy, csak azt használják ki, aki hagyja magát.
20

kihasználni

cica · 2013. Már. 1. (P), 16.19
A segítség önkéntes. Ha úgyérzed hogy kihasználnak ne írj ide.

Megköszönném mindenkinek ha csak a témáról írna és nem offolna vagy stb.
21

Ne haragudj

Hidvégi Gábor · 2013. Már. 1. (P), 17.27
Azt hiszem, félreértettem a helyzetet, ezért bocsánatot kérek! Számomra úgy tűnt, hogy
  • a suliban kaptad ezt a feladatot
  • rákerestél valami kulcsszóra
  • találtál egy tizenöt éves példát, ami nem működött
  • bemásoltad ide
  • itt kaptál egy majdnem teljes megoldást
  • alapismeretek híján nem tudod befejezni
  • reméled, valaki majd ezt megteszi
22

Nem tudsz felülemelkedni

cica · 2013. Már. 1. (P), 19.40
Nem tudsz felülemelkedni önmagadon.
23

Semmi közöm hozzá,

Pepita · 2013. Már. 1. (P), 20.24
de szerintem ti mindketten félreértitek (itt) a másikat, emiatt rosszabbat feltételeztek róla, mint amilyen. Kérném - ha lehet -, hogy ne szúrkáljátok egymást, mert - engem - bánt, zavar, stb.

Viszont tényleg nincs közöm hozzá, tehát ha bárkit zavar ez a kommentem, nyugodtan törölhető.
24

Próbáltam nem piszkálódni.

cica · 2013. Már. 1. (P), 20.32
Próbáltam nem piszkálódni. Lásd feljebb "Megköszönném mindenkinek ha csak a témáról írna és nem offolna vagy stb."
Hú mi lett ebből.

Zárjuk le a témát.
19

A nextQuestion függvény

Poetro · 2013. Már. 1. (P), 16.18
A nextQuestion függvény implementációját kellene befejezned. Ennek ki kellene írni az üzeneteket, valamint kezelni ha vége a mókának.