Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Lomakkeen tarkitus javascriptillä

Sivun loppuun

taneli [21.06.2014 19:49:54]

#

Olen yrittänyt tehdä lomakkeen tarkituksen. Funktiota "tarkista" kutsutaan painettaessa lomakkeen lähetysnappia.
Koodi toimii, jos sähköpostikenttä on tyhjä tai ei sisällä kelvollista sähköpostiosoitetta. Jos sähköpostikentässä on kelvollinen sähköpostiosoite, niin muutkin kentät voivat olla tyhjiä ilman, että sivu siitä valittaa. Miksi?

function tarkista() {
	var email = document.getElementById('email').value;
	var atpos = email.indexOf("@");
	var dotpos = email.lastIndexOf(".");
	if (atpos< 1 || dotpos<atpos+2 || dotpos+2>=x.length) {
		alert("Ole hyvä ja kirjoita kelvollinen sähköpostiosoite");
	}
	var name = document.getElementById('name').value;
    if (name == "") {
        alert("Ole hyvä ja kirjoita nimesi");
    }
	var yhdistys = document.getElementById('yhdistys').value;
	if (yhdistys == "") {
        alert("Ole hyvä ja kirjoita yrityksesi/yhdistyksesi nimi");
    }
	var address1 = document.getElementById('address1').value;
	if (address1 == "") {
        alert("Ole hyvä ja kirjoita osoitteesi");
    }
}

Yucca [21.06.2014 20:18:13]

#

Muuttuja x on määrittelemätön, joten viittaus x.length aiheuttaa virheen, joka aiheuttaa funktion suorituksen katkeamisen.

Koodista ei ilmene, mitä testi dotpos+2>=x.length yrittää tarkistaa, joten en tiedä, miten kohta pitäisi korjata.

Jatkossa kannattaa tällaisissa kysymyksissä esittää myös HTML-koodi ja mielellään osoite, jossa koodi on suoraan testattavissa.

taneli [21.06.2014 20:43:36]

#

Virhe tosiaan oli siellä.

Tuo sähköpostin tarkitus on täältä. Vaihdoin x:t parempaan nimeen, mutta tuo yksi näköjään unohtui.

Metabolix [21.06.2014 23:29:44]

#

Virheiden etsintä kannattaa yleensä aloittaa selaimen kehittäjätyökalujen virhekonsolista. Tällaiset kirjoitus- ja nimeämisvirheet näkyvät sieltä helposti aloittelijallekin.

Omien JS-tarkistusfunktioiden virittely on vanhanaikaista ja virhealtista. Mielestäni nykyään kannattaa käyttää HTML5:n ominaisuuksia (type="email", required="required" ja tarvittaessa pattern="lauseke") ja tarvittaessa jotain valmista JS-kirjastoa, joka toteuttaa ne vanhemmille selaimille tai tyylittelee virheilmoitukset mielen mukaan.

p99o [21.06.2014 23:56:59]

#

http://html5pattern.com/

Yucca [22.06.2014 20:27:27]

#

Metabolix kirjoitti:

Omien JS-tarkistusfunktioiden virittely on vanhanaikaista ja virhealtista. Mielestäni nykyään kannattaa käyttää HTML5:n ominaisuuksia (type="email", required="required" ja tarvittaessa pattern="lauseke") ja tarvittaessa jotain valmista JS-kirjastoa, joka toteuttaa ne vanhemmille selaimille tai tyylittelee virheilmoitukset mielen mukaan.

Periaatteessa kyllä, mutta käytännössä meiliosoitekentän tarkistuksen tärkein hyöty on, että huomataan ajoissa, jos käyttäjä on kirjoittanut kenttään esimerkiksi nimensä tai kengännumeronsa. Siksi se, että tarkistetaan, että mukana on @-merkki, ratkaisee vähintään 80 % ratkaistavissa olevista ongelmista. Tämän koodaaminen itse ei välttämättä ole tyhmää. Onhan valtaosa sähkäpostiosoitteen tarkistamisen valmiista koodeista tuplasti virheellisiä: hylkää oikeita osoitteita ja hyväksyy vääriä. Siksi voi olla ihan fiksua tehdä oma erittäin simppeli koodi (mielellään simppelimpi kuin kysymyksessä!), joka ei hylkää mitään kelvollista (vaikka päästää läpi paljon kelvotonta). Eihän ole olemassa mitään algoritmista tapaa tarkistaa, onko annettu osoite toimiva. (Lähimmäksi pääsee koodilla, joka lähettää osoitteeseen testiviestin, mutta silloinkin jäädään aika kauas varmistamisesta.)

jlaire [22.06.2014 20:55:45]

#

HTML5:n mukaisesta type="email" merkinnästä on muitakin hyötyjä. Esimerkiksi kännykkäselain voi vaihtaa kyseisen kentän kohdalla näppäimistöleiskaa niin, että piste ja @ ovat suoraan esillä.

Onko jossain selaimessa tosiaan niin virheellinen sähköpostiosoitteen tarkistus, että on parempi viritellä itse?

Metabolix [22.06.2014 21:22:37]

#

Yucca kirjoitti:

Siksi se, että tarkistetaan, että mukana on @-merkki, ratkaisee vähintään 80 % ratkaistavissa olevista ongelmista. Tämän koodaaminen itse ei välttämättä ole tyhmää.

Jos olisikin niin, että selainten valmiit tarkistukset olisivat viallisia, tämänkin voisi ”koodata” itse paljon yksinkertaisemmin ja selvemmin pattern-attribuutilla.

Grez [23.06.2014 08:05:19]

#

Voihan siihen laittaa email ja lisäksi tehdä tarkistuksen mahdollisia sellaisia selaimia varten, jotka eivät email tyyppiä ymmärrä vaan tekevät normaalin tekstikentän.


Sivun alkuun

Vastaus

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

Tietoa sivustosta