Autor | Zpráva | ||
---|---|---|---|
MATRAUX Profil |
Dobrý den,
mám problém při vkládání znaků pomocí event.keyCode a už si fakt nevím rady, prošel jsem snad všechny vlákna tady na foru ale nic moc jsem k tomu nenašel funkce pro vkládání znaku: function enter(id){ if (event.keyCode == 13){ var tag = '<br>'; var id = document.getElementById(id); if (document.selection){ id.focus(); set = document.selection.createRange(); set.text = tag; } else if (id.selectionStart || id.selectionStart == 0) { startPos = id.selectionStart; endPos = id.selectionEnd; id.value = id.value.substring(0, startPos) + tag + id.value.substring(endPos, id.value.length); } else id.value += tag; } } funkce je v externím souboru wf.js textarea zapsaná na stránce: <textarea id="txtarea21" onKeyDown="enter(this.id);"
při stisknutí klávesy "Enter" se mi vloží do textového pole textarea znaky <br>
bohužel ve firefoxu to nic nedělá, nevím proč ale Firefox nechce zpracovat podmínku if (event.keyCode == 13){vložení znaku}
pokud vynechám podmínku if (event.keyCode == 13){vložení znaku} firefox vloží znaky <br> úplně bez problémů (samozřejmně po každém stisku jakékoliv klávesy)
Moderátor Chamurappi: Vkládej prosím kódy mezi značky [>pre] a [>/pre] (stačí kliknout na ).
|
||
Chamurappi Profil |
#2 · Zasláno: 23. 2. 2010, 19:47:33
Reaguji na MATRAUXe:
Proč zjišťuješ ID objektu a pak podle ID dohledáváš objekt? Proč nepředáš jako argument přímo this ?
Problém je v odlišném přístupu k objektu event , v Exploreru je dostupný globálně, ale v Mozille se předává pouze lokálně zpracovávajícímu kódu.
Takže v HTML uprav volání: onKeyDown="enter(this, event);"
A pozměň skript: function enter(id, event){ if (event.keyCode == 13){ var tag = '<br>'; if (document.selection){ // atd. |
||
sysel Profil |
#3 · Zasláno: 23. 2. 2010, 20:38:07 · Upravil/a: sysel
Je fakt, že s konceptem event.keyCode jsem měl ve FF rovněž problémy a příklady převzaté z Intenetu často nefungovaly. Tohle se chytlo a tak to používám, aniž bych znal zdůvodnění, proč.
Pokusím se přepsat to pro daný účel: <script> function getkey(e) { var code; if (!e) var e = window.event; // pro IE if (e.keyCode) code = e.keyCode; // IE a Mozilla - onkeydown .. číslo klávesy else if (e.which) code = e.which; // NN4 - onkeypress .. utf znaku return code; } function enter(id,el){ if (getkey(el) == 13){ var tag = '<br>'; ... } </script> ... <body> <textarea id="txtarea21" onKeyDown="enter(this.id, event);" .....> </body> Nějaké ty odlišnosti mezi MSIE a FF řeší fce getkey(e). Váš skript však nadále nefunguje. Připadá mi dost neobratné lovit hledaný objekt přes metodou getElementById(this.id), když výsledek je totožný s -this-. S tím se budete muset poprat. Velmi nedoporučuji používat jako identifikátory slova totožná s klíčovýmy (příkladně -id-). |
||
sysel Profil |
#4 · Zasláno: 23. 2. 2010, 20:44:01
No a než jsem to vyblekotal, tak jsem tady za Plhu :-) Ale jsem rád, že se tak moc od Chamurappiho neliším :D
|
||
Chamurappi Profil |
#5 · Zasláno: 23. 2. 2010, 21:08:27
Reaguji na sysla:
Tvůj řádek 4 není potřeba, e tam bude i v Exploreru.
|
||
sysel Profil |
#6 · Zasláno: 23. 2. 2010, 21:30:14
Děkuji Chamurappimu,
jen si dovolím pozanamenat, že jsem to prachsprostě opsal a nerozumím tomu ani zbla. S pochopením registrování událostí mám dost problém a řeším to ryze empiricky. Ocenil bych na to téma nějakou základní literaturu. Jinak za mých mladých let jsme se učili, že v každém programu je alespoň jedna instrukce chybná a jedna zbytečná. Opravou se nejméně jeden chybný řádek opět vloží. Takže teoreticky se dá každý program zredukovat na jednu instrukci, která je zbytečná a chybná zároveň. :D |
||
Fred Profil |
#7 · Zasláno: 23. 2. 2010, 21:36:55
nerozumím tomu, ale určitě bych vyhodil to onkeydown z textarey úplně pryč.
function bum(id){ document.getElementById(id).onkeydown=function(e){ e=(window.event)?event:e; if(e.keyCode==13){ var tag='<br>'; var ids=document.getElementById(id); if(document.selection){ ids.focus(); set=document.selection.createRange(); set.text=tag; } else if(ids.selectionStart||ids.selectionStart==0){ startPos=ids.selectionStart; endPos=ids.selectionEnd; ids.value=ids.value.substring(0,startPos)+tag+ids.value.substring(endPos,ids.value.length); } else{ ids.value+=tag; } } } } bum('txtarea21'); |
||
Fred Profil |
#8 · Zasláno: 23. 2. 2010, 21:53:26
Koukám, že to blbne v mozille, protože tam kus chybí
else if(ids.selectionStart||ids.selectionStart==0){ startPos=ids.selectionStart; endPos=ids.selectionEnd; ids.value=ids.value.substring(0,startPos)+tag+ids.value.substring(endPos,ids.value.length); ids.selectionStart=startPos+tag.length; ids.selectionEnd=endPos+tag.length; } |
||
MATRAUX Profil |
#9 · Zasláno: 23. 2. 2010, 22:51:24
Chamurappi:
Díky moc ;) funguje to perfektně, ID jsem zjišťoval protože mám těch textarea víc pod sebou a nevěděl jsem že to jde takhle :-) Všem ostatním taky děkuji :-) |
||
Časová prodleva: 14 let
|
0