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.
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/
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(/\++/, '+')"
.
Iso kiitos, tämä auttoi paljon!
Sitten vielä yksi kysymys:
Miten saa replaceattua minkä tahansa kirjaimen (lukuunottamatta +, -, / ja * -merkkejä) tyhjällä?
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('')
Ei tuo pätkä ainakaan toiminut funktiossani...
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( ... )
.
Taidanpa vielä lukea tuon merkkijonojen käsittelyyn kohdistuvan oppaan kerran, mutta kiitos kuitenkin avustasi!
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.
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?
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
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) { ... }
Ok. Voitko vielä kertoa, että mitä tekevät nuo [ ja ] merkit ja tuo g tässä:
replace(/[^-+*\/]/g, '')
https://www.ohjelmointiputka.net/oppaat/opas.
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.
Ok. Kiitos paljon!
EDIT:
Toimiiko tämä?
function replaceothers() { document.form.textfield.field.replace(/[^0-9]/[^+-*\/]/g, ""); }
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.
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
Aihe on jo aika vanha, joten et voi enää vastata siihen.