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.