Avatar billede marrix Juniormester
10. juni 2004 - 11:59 Der er 36 kommentarer og
2 løsninger

Textarea: identificere netop indtastede tegn?

Hej eksperter

...endnu et spørgsmål fra en der er ved at lære lidt javascript...

I en tekst indtastet i et textarea: Kan jeg identificere og manipulere med et netop indtastet tegn? Jeg kan jo ikke gå ud fra, at det nødvendigvis er det sidste tegn i tekstblokken, idet brugeren kan gå tilbage og rette inde i tekstblokken...Så hvordan så?

Venligst, Marianne
Avatar billede mm12010 Nybegynder
10. juni 2004 - 12:21 #1
<textarea name="txt" onkeypress="alert(String.fromCharCode((e.keyCode)?e.keyCode:e.which));"></textarea>
Avatar billede grunken Nybegynder
10. juni 2004 - 12:31 #2
-og mm12010 mangler vist at ændre et par e'r til event :o)

<script type="text/javascript">
function checkdet(e){
if(!e)e=event;
k=(e.keyCode)?e.keyCode:e.which;
alert(String.fromCharCode(k));
}
</script>

<textarea onkeypress="checkdet();">
</textarea>
Avatar billede mm12010 Nybegynder
10. juni 2004 - 12:34 #3
ahh, ja - sorry, tog lige if-delen ud af en funktion :o)
Avatar billede steen_hansen Forsker
10. juni 2004 - 12:36 #4
Følger lige med. I hvilken sammenhæng kunne det være interessant med denne funktion?
Avatar billede marrix Juniormester
10. juni 2004 - 12:51 #5
hmmmm...hvordan skal det læses? Hvad forstås ved "if(!e)e=event;" - eller rettere hvad er det der betinges i if-sætningen? Hvad dækker keyCode over? Får jeg adgang til det netop indtastede tegn med "alert(String.fromCharCode(k));"?

...jeg vil gerne have mulighed for at nægte brugeren at indtaste visse tegn i det aktuelle textarea - altså noget med simpelthen at ignorere de "forbudte" tegn. Tænkte at jeg kunne gøre det med noget "return false;" hvis blot jeg kan identificere hvad han netop har indtastet. Men måske er der en nemmere måde?!?

Venligst, marianne
Avatar billede steen_hansen Forsker
10. juni 2004 - 12:53 #6
Mon ikke det er RegExpr der skal til? Jeg ved ikke om man kan lave dette i JS.
Avatar billede mm12010 Nybegynder
10. juni 2004 - 13:05 #7
onkeyup="this.value=this.value.replace(/[forbudte tegn]/g,'');"

eller skal man bruge event.returnValue=false men det virker kun i IE5+
Avatar billede grunken Nybegynder
10. juni 2004 - 13:05 #8
if(!e)e=event //hvis e ikke er sat så sætter den e til nuværende event - så du kan selv bestemme om du vil overføre det med til funktionen

Og den ønskede funktion kunne let opnås sådan her :o)

<script type="text/javascript">
function checkdet(e){

a="abcd"; //ugyldige tegn


if(!e)e=event;
k=(e.keyCode)?e.keyCode:e.which;
if(a.indexOf(String.fromCharCode(k))!=-1)return false;
}
</script>

<textarea onkeypress="return checkdet(event);">
</textarea>
Avatar billede marrix Juniormester
10. juni 2004 - 13:20 #9
Okay - det ser jo forholdsvis nemt ud. Tjekker lige - skal til møde om lidt, så måske vender jeg først tilbage i løbet af i aften.

Venligst, marianne
Avatar billede marrix Juniormester
10. juni 2004 - 13:33 #10
...lige et spørgsmål mere - hvad betyder et "?" i javascriptsprog? Har slået op alle mulige steder, men kan ikke finde det...
Avatar billede roenving Novice
10. juni 2004 - 13:47 #11
Shortcut if-sætning:

værdi = (betingelse)?resultatHvisSand:resultatHvisFejl;
Avatar billede roenving Novice
10. juni 2004 - 13:49 #12
-- og jeg kunne ikke lade være at forkorte en anelse !-)

<script type="text/javascript">

a="abcd"; //ugyldige tegn

function checkdet(e){
if(!e)e=event;
k=(e.keyCode)?e.keyCode:e.which;
return (a.indexOf(String.fromCharCode(k))==-1);
}
</script>

<textarea onkeypress="return checkdet(event);">
</textarea>
Avatar billede marrix Juniormester
10. juni 2004 - 21:21 #13
...okay - skal lige vænne mig til de der sammentrukne sætninger ;) - ser lidt uoverskueligt ud, når det er så kompakt.

I forbindelse med ovenstående - hvordan benævner man et linjeskift i javascript (er et af de "ugyldige tegn")? Og hvordan benævner man nummer 2, 3, 4 ... mellemrum (1 mellemrum er ok, men flere mellemrum skal ignoreres)?
Avatar billede grunken Nybegynder
10. juni 2004 - 21:45 #14
Det er nok ved nærmere overvejelser lettest at bruge regular expressions som mm123213423 er inde på ;o)
Avatar billede marrix Juniormester
10. juni 2004 - 21:57 #15
...ja mm12010 har givet mig (i et andet spørgsmål) en ganske aldeles fremragende måde at pille linjeskift mv. ud på. Det er lidt svært at forklare, men i den forbindelse jeg skal bruge funktionen, vil det fungere bedst (efter at have testet og afprøvet), hvis linjeskift og mellemrumstegn (udover det første) blot bliver ignoreret. Mon ikke det kan lade sig gøre?
Avatar billede grunken Nybegynder
10. juni 2004 - 22:53 #16
du kan vel bare gøre sådan her så!

<textarea onkeyup="this.value=this.value.replace(/\s{2,}/gi,' ').replace(/[abcd]/gi,'');"></textarea>
Avatar billede grunken Nybegynder
10. juni 2004 - 23:02 #17
og lidt kortere :o)

<textarea onkeyup="this.value=this.value.replace(/\s+$/,' ').replace(/[abcd]/gi,'');"></textarea>
Avatar billede roenving Novice
10. juni 2004 - 23:22 #18
>>grunken

Hvorfra har du din formodning om, at kun dobbelte forekomster af whitespace skal erstattes, hvis det er det sidste i strengen ?-)
Avatar billede grunken Nybegynder
10. juni 2004 - 23:32 #19
bevarres ;D

har ingen formodninger overhovedet :o)

this.value=this.value.replace(/\s{2,}/
Avatar billede grunken Nybegynder
10. juni 2004 - 23:33 #20
syns generelt bare at den er dødeligt irreterende :o)
Avatar billede roenving Novice
10. juni 2004 - 23:49 #21
*gg*

this.value=this.value.replace(/\s+/

?-)
Avatar billede marrix Juniormester
11. juni 2004 - 06:00 #22
Øvbøv...forstår ikke en meter - og g'morgen i øvrigt |-)
Kan I ikke - bare ganske kort - forklare de der tegn: Hvad er/betyder /\s /gi $/ og (/[abcd]/gi,'') osv. Er skråstregerne til at adskille med eller er det en del af tegnet? Har gennemsøgt nettet for en oversigt over javascript-tegn, hvor jeres mystiske tegn indgår - uden held. Så spørger lidt dumt....  <:-)
Avatar billede mm12010 Nybegynder
11. juni 2004 - 11:33 #24
onkeyup="if(this.value.match(/[\s]{2,}/))this.value=this.value.replace(/[\s]{2,}/g,'\40');"
Avatar billede marrix Juniormester
11. juni 2004 - 13:46 #25
Tak for det gode link - det har allerede fået status af meget vigtigt bogmærke :)

Som noget der nok mest af alt er et mix af ovenstående og mit tidligere spørgsmål, forsøger jeg mig p.t. med følgende:

    var txt = document.minForm.minTxt.value;
    if(txt.indexOf("\n") > -1) {
    document.minForm.minTxt.value=txt.replace(/\s/gi,"");
    return false
}

Eftersom funktionen kaldes hver gang textarea ændres (onChange mv.), har jeg vist ikke brug for at gennemløbe strengen. Så det virker næsten perfekt. Dog... :(

Når jeg indtaster et linjeskift bliver det fjernet - det er som det skal være. Men desværre fjerner funktionen samtidig alle tekstens mellemrum... Hvad kan jeg erstatte
"/\s/gi" med for at dette ikke sker (så det altså kun er linjeskiftet der bliver strøget)?
Avatar billede roenving Novice
11. juni 2004 - 13:50 #26
\n
Avatar billede marrix Juniormester
11. juni 2004 - 13:56 #27
...ja det virker jo indlysende - og jeg har også prøvet med (/\n/gi,""): Og får jeg ganske rigtigt ikke lov til at komme videre (return false) i sætningen, men desværre bliver linjeskiftet ved med at være der, hvor jeg gerne vil have at cursoren hopper tilbage på linjen ovenfor.
Avatar billede marrix Juniormester
11. juni 2004 - 17:32 #28
...hmmm, ja okay - det er vel ok, som det er.
Tusind tak til jer alle. Men se nu er jeg jo lidt på den, I er jo flere der har hjulpet mig frem til en fornuftig løsning. Så hvem bør jeg give points? mm12010 var først ude, men grunken og roenving har også deltaget med vigtige oplysninger. Hvad gør jeg i dette tilfælde? Er det retfærdigt, hvis I tre deler pointene? Eller hvad?
Avatar billede roenving Novice
11. juni 2004 - 17:38 #29
Du beder dem, du har lyst til at give point om at svare, og så fordeler du dem, som du mener er rigtigst !-)
Avatar billede marrix Juniormester
12. juni 2004 - 14:56 #30
...jamen ville det så genere nogen, eller vil nogen føle sig forfordelt, hvis jeg bad roenving, mm12010 samt grunken om at give mig et svar?  :) 
venligst, Marianne
Avatar billede roenving Novice
12. juni 2004 - 14:59 #31
-- nu var det jo grunken og mm12010, som trak læsset, så det må være småbidder til mig !-)

-- velbekomme '-)
Avatar billede marrix Juniormester
12. juni 2004 - 19:53 #32
Okay ... kan vi få grunken og mm12010 på banen med et bette svar...? ;)

venligst, Marianne
Avatar billede grunken Nybegynder
12. juni 2004 - 20:58 #33
springer over :o)
Avatar billede marrix Juniormester
13. juni 2004 - 07:53 #34
...jamen grunken dog! Men du bestemmer jo selvfølgelig selv. Hvor mon mm12010 bliver af?
Avatar billede mm12010 Nybegynder
13. juni 2004 - 15:34 #35
han kommer her !-)
Avatar billede marrix Juniormester
14. juni 2004 - 14:40 #36
Tusind tak for hjælpen til jer alle... Jeg dukker med stor sandsynlighed op snart igen, da jeg p.t. har rodet mig ind i nogle opgaver, som involverer en del javascript. Så på gensyn... <:o))
Allervenligst, marianne
Avatar billede roenving Novice
14. juni 2004 - 15:10 #37
Og tak for point ;~}
Avatar billede mm12010 Nybegynder
14. juni 2004 - 18:03 #38
selv tak :o)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester