Autor Zpráva
midlan
Profil
Ahoj,
potřeboval bych na stránce udělat klikání pomocí klávesnice. Mám na stránce abecedu odkazů:
<a href="a">a</a>
<a href="b">b</a>
atd.


a potřebji aby když uživatel zmáčkne na klávesnici písmeno a, aby se na něj kliklo tzn. provedla se jquery fce:
$("a").click(mojeprikazy...)
. Ví někdo jak na to? :)
pcmanik
Profil
Hladaj keycode - totizto kazda klavesa ma svoje cislo a ty budes tymto eventom priradovat. Napr A je 65, b 66 atd...

Resp. jQuery ma na toto udalost
midlan
Profil
no dobře, ale jak z jquery to číslo klávesy dostanu?
$(document).keydown(function() {
  alert("test");
});
když použiju tohle tak mi při zmáčknutí jakékoliv klávesy vyhodí alert, já ještě potřebuji zjistit to číslo klávesy, nejenom to že klávesa byla zmáčknuta.
Keeehi
Profil
midlan:
Tak se znovu podívej na tu stránku, kterou ti pcmanik odkázal a dole máš příklad použití.
cesilek
Profil
Nějak takhle ;)

$(document).bind('keyup', function (e) {
		var key = e.keyCode || e.which;
		if (key === 13 ) alert ("Stisknutý enter"); 
});
		
midlan
Profil
Keeehi:
co na tom nechápu je tohle:
<script type="text/javascript" src="/scripts/events.js"></script>
co to je za soubor? kde ho vemu?
Keeehi
Profil
midlan:
Myslím, že to můžeš vynechat. Nevím, proč to tam mají, ale sami ho nepoužili.
pcmanik
Profil
midlan:
To nic neznamena, a kod od cesilek-a by som radsej nepouzil, vznikali by ti s tym len problemy, a berie si to zbytocne viac pamete.
Witiko
Profil
pcmanik:
vznikali by ti s tym len problemy, a berie si to zbytocne viac pamete
Mohl bys to rozvést? Až na použití eventu keyup místo keydown nevidím nic závadného (předpokládám, že rozdíly mezi event modelem Internet exploreru a ostatních prohlížečů jQuery metoda bind abstraktizuje) ?
pcmanik
Profil
Witiko:
Metoda bind sa chova inak ako ostatne metody jQuery, Resp nwm cim je to, ale vsade sa pise ze je proste lepsie pouzivat priamo metody a nie bind, ak sa da tomu vyhnut.
midlan
Profil
Tak jsem to uz konecne pochopil, byl jsem zmatenej z ze tam byl linknutej event.js a pak se se ten objekt taky jmenoval event. Myslel jsem ze ten objekt ma nejakou zavislost na tom event.js.

vyresil jsem to takto:
var abeceda = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"];

$(document).ready(function() {
  $(document).keydown(function(klavesa) {
  
    if(((klavesa.keyCode-65)>=0)&&((klavesa.keyCode-65)<abeceda.length)) {

      pismeno = abeceda[klavesa.keyCode-65]; 
      $("#message").html(pismeno);
    }
  });
});


slo mi o to dostat pismeno do promeny, funguje to jenom na pismena co jsou v array

dekuji za pomoc :)
Witiko
Profil
midlan:
Ještě si můžeš vedle abecedy uložit délku toho pole, aby se nemusela neustále zjišťovat přes abeceda.length. Stejně tak bych si pro pěknost kódu klavesa.keyCode - 65 na začátku funkce hodil do nějaké proměnné. Ale to jsou už jen mikrooptimalizace. :)

pcmanik:
Podíval jsem se do zdrojového kódu jQuery a funkce JQuery.blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave mají ve svém těle následující:
return arguments.length > 0 ?
  this.bind( name, data, fn ) :
  this.trigger( name );
Takže se nejspíš bude jednat o pouhou jQuery pověru. ;)
midlan
Profil
Witiko:
tak to už jsou optimalizace pro oči. V praxi to myslím chodí tak že čim víc proměnných, tím více program zabírá RAM ne? Proto jich používám jen nutné množství.

Teď jsem se ale zasekl u další věci. Je možné použít slektor v jquery takto:
$("#pismena a[href="+pismeno+"]")
?
Witiko
Profil
midlan:
V praxi to myslím chodí tak že čim víc proměnných, tím více program zabírá RAM ne?
Jistě, ale myslím, že uložení jednoho 32bajtového čísla je oproti počítání velikosti pole při každém kliknutí výhodnější. :-) Navíc zaobírání se RAM se bere u vyšších programovacích jazyků za kontraproduktivní a většinou není její monitorování a přímá interakce s ní ani umožněna. Ve chvíli, kdy se vynoří problémy s nedostatkem RAM, by měl člověk zauvažovat o napsání svého výtvoru v nízkoúrovnovějším, kompilovaném jazyce.

A nebo zkusit přestat ukládat textové řetězce do polí, jež jsou vyplněny dalšími poli o velikosti 8 - 32 (uvažujme Unicode) buněk, v nichž jsou ve dvojkové soustavě uloženy jednotlivé bity ve formě číslic zabírajících 32 bajtů. Tím chci říct, že javascript je tak otevřený jazyk, že není problém psát něco zcela neefektivně. :-)
function Řetězec(text) {
  if(!(this instanceof Řetězec))
    return new Řetězec(text);
  var data = [],
      pointer = 0,
      length = text.length;
  do data.push(Znak(text[pointer])); while(++pointer !== length)
  this.stringify = function() {
    var string = [],
        pointer = 0;
    do string.push(data[pointer].stringify()); while(++pointer !== length)
    return string.join("");
  };
};

function Znak(znak) {
  if(!(this instanceof Znak))
    return new Znak(znak);
  var data = [],
      bits = znak.charCodeAt(0).toString(2),
      pointer = 0,
      length = bits.length;
  do data.push(bits[pointer]); while(++pointer !== length)
  this.stringify = function() {
    return String.fromCharCode(parseInt(data.join(""), 2));
  };
};

var textBible = Řetězec($("#kniha").text());
// Sbohem volná RAM. Vítej mezi námi, swapovací soubore.


Je možné použít slektor v jquery takto
Selektory v jQuery jsou pouhou simulací CSS selektorů. Co ti zbaští CSS, zbaští ti i jQuery. V daném výrazu máš chybu, href je třeba obalit apostrofy:
$("#pismena a[href=\"" + pismeno + "\"]")
midlan
Profil
Witiko:
href je třeba obalit apostrofy
kam je mám dát?

V tom případě je divné že:
$("a[href=about]").click();
mi funguje bezchybně :/

Potřebuji hodnotu href v selektoru doplnit z proměnné...
Witiko
Profil
midlan:
Máš v předchozím příspěvku řešení.

V tom případě je divné že
Divného na tom není nic, znaky jako tečka způsobí, že parser rozřeže výraz špatně.
midlan
Profil
Witiko:
žádná změna, pořád nejde :(

edit: ale řekl bych že to bude spíš strukturou kódu, když jsem to měl v $("a").click(tady) a měl tam $(this) tak to běhalo...
Witiko
Profil
midlan:
$("#pismena a[href=\"" + pismeno + "\"]")
je plně validní selektor. Nejspíš budeš mít tedy rozbitého něco jiného, takže se budeš muset pochlubit s celou funkcí.
midlan
Profil
Witiko:
nn nebudu :D dělám v PSPadu a ten vužívá jádro IE7-v něm to nešlo :D

takže už snad dám pokoj, protože už to mám v podstatě hotový :)

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0