Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: JavaScript: Näppäimet JavaScriptissä

Sivun loppuun

Ceox [18.11.2007 09:52:06]

#

Hei.
Saako JavaScriptillä määritettyä jonkin tietyn napin painalluksen näppäimistöllä?
Esim. kun painan B- kirjainta avautuu uusi ikkuna.
Ajattelin että tätä voisi soveltaa omaan ongelmaani:
Scriptissäni on input fieldi:

<input type="text" value="Kirjoita tähän" name="writehere">

ja haluan, että kun on painanut + -merkkiä, ja koittaa painaa uudestaan sitä plus merkkiä, niin textfieldiin ei tulekaan sitä. Eli ei saa olla kahta + -merkkiä peräkkäin.
Toivottavasti ymmärsitte.

P.S. Koitin toteuttaa jälkimmäistä ongelmaa etsimällä scriptistä aina tuon + merkin, ja siinä tapauksessa että se on viimeinen ja käyttäjä sijoittaa kenttään vielä yhden plussan, niin kentästä poistetaan viimeinen plussa. Ei kuitenkaan toiminut.

jlaire [18.11.2007 14:37:12]

#

Ceox kirjoitti:

Saako JavaScriptillä määritettyä jonkin tietyn napin painalluksen näppäimistöllä?
Esim. kun painan B- kirjainta avautuu uusi ikkuna.

Periaatteessa kyllä, mutta selainten välillä on aika paljon eroja. Lukaise tämä: http://www.howtocreate.co.uk/tutorials/javascript/eventinfo.

Ceox kirjoitti:

Koitin toteuttaa jälkimmäistä ongelmaa etsimällä scriptistä aina tuon + merkin, ja siinä tapauksessa että se on viimeinen ja käyttäjä sijoittaa kenttään vielä yhden plussan, niin kentästä poistetaan viimeinen plussa. Ei kuitenkaan toiminut.

Kokeile tätä: onkeyup="this.value = this.value.replace(/\++/, '+')".

Ceox [18.11.2007 19:26:12]

#

Iso kiitos, tämä auttoi paljon!

Ceox [19.11.2007 15:29:26]

#

Sitten vielä yksi kysymys:
Miten saa replaceattua minkä tahansa kirjaimen (lukuunottamatta +, -, / ja * -merkkejä) tyhjällä?

jlaire [19.11.2007 16:07:12]

#

Säännöllisissä lausekkeissa [abc] hyväksyy merkin joka on joko "a", "b" tai "c" ja [^abc] hyväksyy merkin joka ei ole "a", "b" tai "c".

Koska / on erikoismerkki, sen eteen pitää lisätä \.

Eli näin:

replace(/[^-+*\/]/g, '')

Tai vähän eri idealla:

match(/[-+*\/]/g).join('')

Ceox [19.11.2007 16:50:43]

#

Ei tuo pätkä ainakaan toiminut funktiossani...

jlaire [19.11.2007 16:58:59]

#

Toimii minulla:

js> var testi = "a - b * c + x / y"
js> testi.replace(/[^-+*\/]/g, '')
-*+/

Tarkoititko, että merkit korvataan välilyönnillä? Saatoin ymmärtää väärin.

js> testi.replace(/[^-+*\/]/g, ' ')
  -   *   +   /

Ja replace pelkästään palauttaa muunnetun merkkijonon. Jos haluat tallentaa muutoksen, käytä testi = testi.replace( ... ).

Ceox [19.11.2007 17:43:51]

#

Taidanpa vielä lukea tuon merkkijonojen käsittelyyn kohdistuvan oppaan kerran, mutta kiitos kuitenkin avustasi!

LaNu [19.11.2007 19:28:46]

#

Ceox kirjoitti:

Sitten vielä yksi kysymys:
Miten saa replaceattua minkä tahansa kirjaimen (lukuunottamatta +, -, / ja * -merkkejä) tyhjällä?

Jos funktion esimerkki ei toimi oikein, niin veikkaisin vian olevan ongelman kuvauksessa. Pitikö tuon esim. jättää numerot korvaamatta? funktion pätkähän poistaa kaikki muut merkit kuin +-/*. En ihan varmaksi muista syntaksia, mutta /[^-+*\/0-9]/ voisi olla toimiva ehto tai ainakin oikean suuntainen.

Ceox [20.11.2007 19:50:51]

#

LaNu kirjoitti:

Ceox kirjoitti:

Sitten vielä yksi kysymys:
Miten saa replaceattua minkä tahansa kirjaimen (lukuunottamatta +, -, / ja * -merkkejä) tyhjällä?

Jos funktion esimerkki ei toimi oikein, niin veikkaisin vian olevan ongelman kuvauksessa. Pitikö tuon esim. jättää numerot korvaamatta? funktion pätkähän poistaa kaikki muut merkit kuin +-/*. En ihan varmaksi muista syntaksia, mutta /[^-+*\/0-9]/ voisi olla toimiva ehto tai ainakin oikean suuntainen.

No juurikin näin. Mitä tuollaiset \ / -sulut ja kaikennäköiset muut sulut tekevät tuolla?

Ceox [21.11.2007 15:57:57]

#

Nyt tajusinkin.
Heräsi taas pari uutta kysymystä:
Miten saa monta ehtoa ehtolauseeseen? esim.

if(luku == 1 tai numero == 2)

Miten saa monta eri vaihtoehtoa yhteen ehtoon? esim.

if(luku == 1, tai 2 tai 38

jlaire [21.11.2007 16:08:43]

#

tai = ||
ja = &&

if (luku == 1 || numero == 2) {
    ...
}

Ceox kirjoitti:

Miten saa monta eri vaihtoehtoa yhteen ehtoon?

JavaScriptissä ei taida olla mitään erityisen kätevää tapaa tuohon, pitää tehdä ihan vaan tylsästi:

if (luku == 1 || luku == 2 || luku == 38) {
    ...
}

Ceox [21.11.2007 16:22:42]

#

Ok. Voitko vielä kertoa, että mitä tekevät nuo [ ja ] merkit ja tuo g tässä:

replace(/[^-+*\/]/g, '')

jlaire [21.11.2007 16:56:33]

#

https://www.ohjelmointiputka.net/oppaat/opas.php?tunnus=phpsl#merkkiryhmat

Säännölliset lausekkeet ovat suunnilleen samanlaiset PHP:ssä ja JavaScriptissä (ja lukuisissa muissa kielissä).

Tuo g on lyhenne sanasta "global", eli koko merkkijonon käydään alusta loppuun ja kaikki osumat korvataan. Ilman sitä pelkästään ensimmäinen osuma korvattaisiin.

Ceox [21.11.2007 17:37:34]

#

Ok. Kiitos paljon!
EDIT:
Toimiiko tämä?

function replaceothers()
{
document.form.textfield.field.replace(/[^0-9]/[^+-*\/]/g, "");
}

LaNu [21.11.2007 20:30:39]

#

Empäs heti muistanut, mutta suosikeista löytyy tuollainen js opas suomeksi: http://www.uta.fi/~jl/javascript/

Oppaasta löytyy kappale regexp-oliosta ja Regex-kone, jolla voi testailla lauseiden toimintaa. En muista miten hyvin toimii.

Olga [21.11.2007 20:32:26]

#

Ceox kirjoitti:

Miten saa monta eri vaihtoehtoa yhteen ehtoon? esim.

if(luku == 1, tai 2 tai 38

Taulukon indexOf-metodia käyttämällä tuo onnistuu ihan kivasti:

if ([1, 2, 38].indexOf(luku) >= 0)
  // koodia

Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta