---
title: "Göra enter vid andra förekomsten av ett tecken?"
type: "forum-thread"
url: "https://www.webforum.nu/amne/javascript/191918-göra-enter-vid-andra-förekomsten-av-ett-tecken"
topic: "JavaScript"
topic_url: "https://www.webforum.nu/amne/javascript"
author: "Fireh"
published: "2013-12-28T01:25:53.000Z"
updated: "2013-12-28T22:42:56.000Z"
replies: 9
views: 1043
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/javascript/191918-göra-enter-vid-andra-förekomsten-av-ett-tecken"
---

# Göra enter vid andra förekomsten av ett tecken?

## #1 — Fireh, 2013-12-28T01:25Z

Hej.

Lite luddig rubrik kanske. Jag har en Mag-Tek MAG-21080205 kortläsare som börjar och slutar kortdatat med ;. Om den hade avslutat med ett enter/cr efter det så hade det inte varit några problem, men nu gör den inte det. Jag hittar inget sätt hur jag ska programmera om läsaren (gammal PS/2-grunka) att lägga på ett CR, så då tänkte jag så här:

Finns det något sätt att räkna antalet förekomster av tecknet ;? Det är ett vanligt textfält i ett formulär på en webbsida, så man borde väl kunna använda sig av "onChange" eller liknande och anropa ett Javascript. Javascriptet kollar om strängen innehåller 2 st ; och om så, så gör den ett submit av formuläret? På så sätt blir det ju inget submit före all kortdata är inläst.

Tack på förhand!

Mvh Peter

Permalänk: https://www.webforum.nu/p/191918

## #2 — nitro2k01, 2013-12-28T02:30Z

Just onchange triggar inte förrän textboxen förlorar fokus. Du kan använda onkeypress, men den triggar *innan* tecknet skrivs in. Följande kod kommer alltså skicka iväg formuläret innan det andra semikolonet har lagts till. (Detta kan möjligen variera mellan olika läsare också.) 

Dock postas formuläret under rätt omständigheter, nämligen att det redan finns ett semikolon sist (this.value.slice(-1)==';') och det den aktuella knapptryckningen är ett semikolon (arguments\[0\].keyCode==59) alltså totalt två semikolon i rad.

```
<input name="code" value="" onkeypress="if(this.value.slice(-1)==';' && arguments[0].keyCode==59) this.form.submit();">
```

Om din serversida absolut inte klarar sig utan det sista semikolonet kan du lägga till en timeout på 50 ms innan formuläret skickas så att det kommer med.

```
<input name="code" value="" onkeypress="var theform = this.form; if(this.value.slice(-1)==';' && arguments[0].keyCode==59) setTimeout(function(){theform.submit();},50);">
```

Permalänk: https://www.webforum.nu/p/2314977

## #3 — Fireh, 2013-12-28T03:12Z

Själva serversidan struntar egentligen i det sista semikolonet om jag tycker den ska göra det, men det kommer dock inte två semikolon i rad. Datat som kommer från kortet ser ut t.ex. så här:

> ;1234684348651684534165312;

Det är när det sista semikolonet skrivits som jag vill att det ska skickas. Funktionen du skrev fungerar i övrigt med två på rad.

Permalänk: https://www.webforum.nu/p/2314978

## #4 — nitro2k01, 2013-12-28T04:03Z

Ah. Jag missuppfattade det på något vänster som att det kunde komma flera datafält separerade med semikolon, och att hela raden avslutades med två semikolon. Då kan du byta ut kravet på att strängen ska sluta med semikolon mot ett krav på att den ska vara längre än 1 tecken långt.

```
<input name="code" value="" onkeypress="if(this.value.length>1 && arguments[0].keyCode==59) this.form.submit();">
```

Permalänk: https://www.webforum.nu/p/2314979

## #5 — Fireh, 2013-12-28T10:23Z

Ja det fungerar ju bättre! Jag tänkte mig då också få med det sista tecknet och testade lägga på timeout-grejen, men det verkar inte fungera alls däremot. Har testat både det du skrev samt ändrat på submit-kommandot eftersom det inte såg ut som de andra, men inget fungerar.

```
<input name="Carddata" type="text" onkeypress="if(this.value.length>1 && arguments[0].keyCode==59) setTimeout(function(){theform.submit();},50);"/>
<input name="Carddata" type="text" onkeypress="if(this.value.length>1 && arguments[0].keyCode==59) setTimeout(function(){this.form.submit();},50);"/>
```

Permalänk: https://www.webforum.nu/p/2314980

## #6 — nitro2k01, 2013-12-28T20:22Z

Problemet är att när den inre funktionen väl körs så betyder this något annat. Därför måste du skapa en referens och skicka med. Det översta av dina försök är rätt förutom att du har glömt att skapa variabeln theform, som alltså inte existerar per automatik.

```
<input name="code" value="" onkeypress="var theform=this.form; if(this.value.length>1 && arguments[0].keyCode==59) setTimeout(function(){theform.submit();},50);">
```

Permalänk: https://www.webforum.nu/p/2314989

## #7 — Fireh, 2013-12-28T21:21Z

Toppen, funkar klockrent nu!

Permalänk: https://www.webforum.nu/p/2314990

## #8 — Fireh, 2013-12-28T21:36Z

Fast det fungerar inte i Firefox, bara i Internet Explorer och Chrome.
Har testat alla varianterna ovan, med och utan timeout.
Någon lösning på det?

Permalänk: https://www.webforum.nu/p/2314992

## #9 — nitro2k01, 2013-12-28T22:21Z

Urk. Detta är den irriterande biten med Javascript. Läsarna har fortfarande sina små egenheter för sig. Det finns två attribut för att ta reda på vilken knapp som trycktes, keyCode och charCode. Ingen av de fungerar med alla läsare! Vissa Men det går att fixa med följande utttryck keycode=arguments\[0\].charCode\|\|arguments\[0\].keyCode som ger charCode om det evalueras som true (i detta fall antingen 0 (false) eller ett nummer \>0 (true)) annars arguments\[0\].keyCode. Så nu kanske det funkar perfekt till slut.

```
<input name="code" value="" onkeypress="var keycode=arguments[0].charCode||arguments[0].keyCode,theform=this.form; if(this.value.length>1 && keycode==59) setTimeout(function(){theform.submit();},50);">
```

Permalänk: https://www.webforum.nu/p/2314993

## #10 — Fireh, 2013-12-28T22:42Z

Nu fungerar det verkligen perfekt överallt :-)

Permalänk: https://www.webforum.nu/p/2314994

---

Tråden på webben: https://www.webforum.nu/amne/javascript/191918-göra-enter-vid-andra-förekomsten-av-ett-tecken
