Autor Zpráva
Petr Tichý
Profil
Dobré odpoledne js-zkušení.
Jako js-lama bych na Vás měl velikou prosbu.

Potřeboval bych naprogramovat tu nejjednodušší kontrolu vyplněních polí u formuláře na email.
(formulář na http://petrtichy.com)

Představoval bych si to tak, že když kliknu na submit, tak to zkontroluje pole, jestli nejsou náhodou prázdná, pokud ano tak to hodí alert a oznámí to, co že jsem to nevyplnil. V případě, že jsou všechny pole vyplněny, tak mě "pustí" dále na serverový skript.

Děkuji velmi za ochotu. js je pro mě španělska vesnice :))
habendorf
Profil
function checkMail(vstupy,jazyk)
{
var string = "";
var filter = /^([a-zA-Z0-9_.-])+@(([a-zA-Z0-9-])+.)+([a-zA-Z0-9]{2,4})$/;
var email = vstupy.email.value;
var zprava = vstupy.zprava.value;
if (!filter.test(email))
{if (jazyk=="cz") {string = string + "Váš e-mail musí mít správný formát. ";}
else
if (jazyk=="de"){string = string + "E-mail enthält keine gültige E-mail Adresse. ";}
else string = string + "Your e-mail must be in the correct format. ";
}
if (!zprava)
{if (jazyk=="cz") {string = string + "Je třeba vyplnit text zprávy.";}
else
if (jazyk=="de"){string = string + "Bitte geben Sie eine Nachricht ein.";}
else string = string + "Fill in the text of your message.";
}
if (string) {
alert(string);
return false
}
else return true
}

Třeba. Odpárej si z toho ty jazykový verze a volej to na onsubmit.
Petr Tichý
Profil
Promiň, že otravuju :( ale já jsem taková ta absolutní js-lama.

Mám tento kód:

<form action="e-mail.php" method="post">
<fieldset>
<legend>Kontaktní formulář</legend>
<label for="name">Vaše jméno:</label><br />
<input id="name" name="name" /><br />
<label for="contact">Kontakt pro odpověď:</label><br />
<input id="contact" name="contact" /><br />
<label for="message">Zpráva/dotaz:</label><br />
<textarea id="message" rows="5" cols="30" name="message"></textarea><br />
<input type="submit" value="Odeslat" id="button" />
<p>Pozn.:</p>
<ul>
<li>Jako "Kontakt pro odpověď" vyplňte prosím e-mail, telefon nebo ICQ. Děkuji</li>
<li>Všechny položky jsou povinné</li>
</ul>
</fieldset>
</form>


a potřebuji z něj udělat to, co jsem psal na začátku. Nejlépe ten skript externí. Děkuji moc
los
Profil *
Funkcia, ktorá bude nastavená vo formulári v atribúte onsubmit, bude vyzerať nejako takto:
function checkForm(form) {

for (var i = 0; i < form.elements.length; ++i)
if (!form.elements[i].value && form.elements[i].type) {
alert("Nevyplnili ste povinné pole!");
form.elements[i].focus();
return false;
}
}


Pripojíš to buď v HTML: <form onsubmit="return checkForm(this)"...
alebo si to môžeš upraviť tak, že to priradíš v JavaScripte (buď v onload alebo v elemente script pripojenom po elemente form): document.getElementById("id-formulara").onsubmit = function() { /* to isté telo funkcie, ale všade bude this namiesto form */ };
habendorf
Profil
los: On chtěl vypsat, co se nevyplnilo. Já vím, částečně to zachraňuješ focusem.
habendorf
Profil
Nejlépe ten skript externí.

To na věci absolutně nic nemění, je na tobě kam ho dáš. Vlastnímu kódu skriptu je to fuk, ten bude stejný.
los
Profil *
habendorf: Aha, to som si nevšimol. Tak potom nejako takto (môžu tam byť preklepy):
document.getElementById("id-formulara") = function() {

var pole = {name: "meno", contact: "kontakt", message: "telo správy"};

for (var i = 0; i < this.elements.length; ++i)
if (!this.elements[i].value && this.elements[i].type) {
alert("Nevyplnili ste " + pole[this.elements[i].name] + "!");
this.elements[i].focus();
return false;
}
}


Prípadne by šlo názov toho, čo nevyplnil vytiahnuť z labelu, ale to by bol ďalší cyklus navyše.
Petr Tichý
Profil
Děkuji všem za ochotu. Jenže jsem na tom asi tak, že vůbec nevím jak na to.

Vězte, že to pro mě je velmi nepříjemné Vás takto otravovat.

Pripojíš to buď v HTML: <form onsubmit="return checkForm(this)"...
alebo si to môžeš upraviť tak, že to priradíš v JavaScripte (buď v onload alebo v elemente script pripojenom po elemente form): document.getElementById("id-formulara").onsubmit = function() { /* to isté telo funkcie, ale všade bude this namiesto form */ };

Tak třeba tady nevím která bije :(

Pokud byste byl někdo tak laskav a napsal mi ten kód přímo do toho mého původního. Nevím kam mám napsat tělo toho skriptu, jak ho mám přiřadit. Jsem úplná js-lama.

Představoval bych si to tak, že mi napíšete tělo skriptu, které includuji v hlavičce (také nevím jak) a u submitu toho formuláře se vyvolá. Ještě děkuji za ochotu :(:(
habendorf
Profil
los: No jestli to má pro tři inputy, tak bych to asi udělal růčo (žádné cykly, pole), viz můj skript. On vypadá dlouhý, ale to je těmi třemi jazyky. Je fakt že ten tvůj je takový elegantnější. Další rozdíl je, že můj vypíše vše najednou, tvůj bude alertovat několikrát za sebou (což zas není tak špatné, protože to umožňuje focusování těch inputů).


document.getElementById("id-formulara") = function() {

má být asi

document.getElementById("id-formulara").onsubmit = function() {
habendorf
Profil
Takže úplně dřevorubecky a neelegantně:

function checkMail(vstupy)
{
var string = "";

var name= vstupy.name.value;
var contact= vstupy.contact.value;
var message= vstupy.message.value;
if (!name)
{string = string + "Je třeba vyplnit jméno.";}
if (!contact)
{string = string + "Je třeba vyplnit kontakt.";}
if (!message)
{string = string + "Je třeba vyplnit zprávu.";}

if (string) {
alert(string);
return false
}
else return true
}


<form .... onsubmit="return checkMail(this)">
habendorf
Profil
Nějak mi to tam dodalo prázdné řádky, ty vyhoď.

Vytvoř si soubor třeba kontrola.js a do něj dej kód skriptu. K html ho přilinkuješ pomocí <script src="cesta/kontrola.js"></script>
Petr Tichý
Profil
Odpusťte mi pánové. Ani se Vám nebudu chlubit co jsem tam prováděl. Nicméně jsem to již snad pochopil a funguje mi to. Děkuji Vám velice za ochotu :o) Pokud bych Vám mohl být platný nějak já, není problém. Ovšem pochybuji jak. Děkuji :o)
Toto téma je uzamčeno. Odpověď nelze zaslat.

0