nefunkční javascript validace formuláře
- Tharos
- Člen | 1030
Máš připojený skript netteForms.js
? Viz [2010–08–09]
Unobtrusive JavaScript namísto InstantClientScript, ten soubor najdeš
v distribuci v adresáři examples/Forms
.
Editoval Tharos (7. 12. 2010 21:59)
- masterr
- Začátečník | 141
Připojený ho nemám, ale hlavně ho nemám ani ve složce examples/Forms v distribuci.
Mám ho jen tady:
NetteFramework-2.0alpha-PHP5.3\NetteFramework-2.0dev-PHP5.3\sandbox\www\js
NetteFramework-2.0alpha-PHP5.3\NetteFramework-2.0dev-PHP5.3\client-side\forms
A ani jeden mi tam nefunguje, když ho připojím. Jaktože ho nemám v tom examples/Forms? Kde ho mám vzít?
Editoval masterr (8. 12. 2010 18:00)
- masterr
- Začátečník | 141
namespace AdminModule;
use Nette\Forms,Nette\Application\AppForm;
use FrontModule\Goods;
use dibi;
protected function createComponentAddgoodsForm()
{
$form = new AppForm;
$form->addText('nazev', 'Název:')
->addRule(\Nette\Forms\Form::FILLED, 'Vyplňte název.');
$form->addTextarea('text', 'Text:')
->addRule(\Nette\Forms\Form::FILLED, 'Vyplňte text.');
$form->addText('cena', 'Cena:')
->addRule(\Nette\Forms\Form::FILLED, 'Vyplňte cenu.')
->addRule(\Nette\Forms\Form::NUMERIC, 'Cena musí být číslo.');
$form->addSubmit('ok', 'Uložit');
$form->onSubmit[] = callback($this, 'addgoodsFormSubmitted');
return $form;
}
- mám připojený ten
<script type=„text/javascript“
src=„http://localhost/ms/files/js/netteForms.js“></script>
cos mi poslal, je dobře nalinkovanej, ale prostě to nefakčí a nefakčí, a
netuším kde je chyba.
Nenapadá vás něco? Kdyžbyste byl někdo moc laskavý tak to můžu někam upnout, že byste se na to někdo podíval. Dík všem za rady a tipy.
- dubak
- Člen | 41
Inak podobný problém mám aj ja, skúsil som si len tak pripojiť k jednému PHP skriptu minimalizovanú verziu Nette a vyskúšať či to funguje. No, formulár vygeneruje, aj validáciu na strane serveru, ale JS proste nefunguje. Išiel som podľa návodu Davida Grudla z serveru zdrojka:
http://zdrojak.root.cz/…roduktivitu/
môj kód:
<?php
require './Nette/nette.min.php';
$form = new Form;
$form->setAction('./index.php');
$form->setMethod('get');
// name je název prvku, Jméno: je popisek
$form->addText('name', 'Meno:')
->addRule(Form::FILLED, 'Zadajte meno');
$form->addText('surname', 'Priezvisko:')
->addRule(Form::FILLED, 'Zadajte priezvisko');
$form->addText('email', 'E-mail:')
->addRule(Form::EMAIL, 'Zadajte platnú e-mailovú adresu');
$form->addCheckbox('suhlas', 'súhlasím so spracovaním osobných dát');
$form->addTextArea('text', 'Poznámky:')
->addRule(Form::FILLED, 'Napište nám prosím vzkaz');
$form->addSubmit('send', 'Odoslať');
// jestliže byl formulář odeslán
if ($form->isSubmitted()) {
// a jestliže jsou všechny položky vyplněny správně
if ($form->isValid()) {
echo '<h1>Formulář byl odeslán</h1>';
$values = $form->getValues();
Debug::dump($values);
exit;
}else {
//error
echo 'Nevalidny';
}
}
echo $form;
?>
- dubak
- Člen | 41
ixod napsal(a):
Inak podobný problém mám aj ja, skúsil som si len tak pripojiť k jednému PHP skriptu minimalizovanú verziu Nette a vyskúšať či to funguje. No, formulár vygeneruje, aj validáciu na strane serveru, ale JS proste nefunguje. Išiel som podľa návodu Davida Grudla z serveru zdrojka:
http://zdrojak.root.cz/…roduktivitu/
môj kód:
<?php require './Nette/nette.min.php'; $form = new Form; $form->setAction('./index.php'); $form->setMethod('get'); // name je název prvku, Jméno: je popisek $form->addText('name', 'Meno:') ->addRule(Form::FILLED, 'Zadajte meno'); $form->addText('surname', 'Priezvisko:') ->addRule(Form::FILLED, 'Zadajte priezvisko'); $form->addText('email', 'E-mail:') ->addRule(Form::EMAIL, 'Zadajte platnú e-mailovú adresu'); $form->addCheckbox('suhlas', 'súhlasím so spracovaním osobných dát'); $form->addTextArea('text', 'Poznámky:') ->addRule(Form::FILLED, 'Napište nám prosím vzkaz'); $form->addSubmit('send', 'Odoslať'); // jestliže byl formulář odeslán if ($form->isSubmitted()) { // a jestliže jsou všechny položky vyplněny správně if ($form->isValid()) { echo '<h1>Formulář byl odeslán</h1>'; $values = $form->getValues(); Debug::dump($values); exit; }else { //error echo 'Nevalidny'; } } echo $form; ?>
No, tak si budem sám odpovedať. V článku David Grudla to bolo trošku nejasne vysvetlené. Doteraz som nepochopil, čo presne myslel týmto:
<?php
require 'Nette/loader.php';
?>
že či prilinkuje jeden súbor a do aplikácie vloží celú adresárovú štruktúru Nette. To som skúšal, ale stále vypisovalo že nepozná rôzne typy Nette tried, napriek tomu že som nastavil dobre konštanty. Potom ma napadlo, že veď načo vkladať do aplikácie celý framework aj so štruktúrou. Dal som tam len tu minimalizovanú formu a išlo to, ale bez formulárov a potom mi teda došlo, že to bude chcieť prilinkovať JS súbor: netteForms.js
Tak to len tak na okraj
- studna
- Člen | 181
Formuláře se začli validovat pomocí tzv. unobtrusive js – asi mám novější NetteForms, protože mi funguje. Nicméně, kdysi jsem si hrál s live validací formulářů a problém byl v tom, že chybělo samotné volání javascriptové validace. Stačí to připsat do NetteForms a nebo na konci stránky mít:
<script type="text/javascript">$('form').submit(function(){ return Nette.validateForm(this);});$(':input').blur(function(){ Nette.validateControl(this);});</script>
(Aby tento konkrétní kód fungoval, musíš načítat ještě jQuery)
- dubak
- Člen | 41
studna napsal(a):
Formuláře se začli validovat pomocí tzv. unobtrusive js – asi mám novější NetteForms, protože mi funguje. Nicméně, kdysi jsem si hrál s live validací formulářů a problém byl v tom, že chybělo samotné volání javascriptové validace. Stačí to připsat do NetteForms a nebo na konci stránky mít:
<script type="text/javascript">$('form').submit(function(){ return Nette.validateForm(this);});$(':input').blur(function(){ Nette.validateControl(this);});</script>
(Aby tento konkrétní kód fungoval, musíš načítat ještě jQuery)
Ano, ako som písal hore, prilinkoval som JS externy súbor a bolo.
- bojovyletoun
- Člen | 667
to je validace, kterou dělá prohlížeč (zde chRÓMe). Když si přilinkuješ netteforms.js (a inicializuješ formy), tak by to mělo zmizet.
- bojovyletoun
- Člen | 667
inicializace formu znamená, právě že Nette.js změní chování toho
formu -tedy vypne html5 validaci a přidá vlastní. Házení alertů je jedna
z možných implementací Funkce (tuším) Nette.AddError.
Podívej se sem –
jquery.nella.js hned na začátku je ta funkce
\--
- bojovyletoun
- Člen | 667
Nevím, v čem je problém, mě to jde. Zkoušel jsi to? Jinak máš možnosti:
- můžeš dát formuláři atribut novalidate
- přimo v nette
$form->elementPrototype->novalidate(true)
- lépe v scriptu `$(‚form‘).attr(„noValidate“,true); `
- přimo v nette
- upravit netteforms.js funkci Nette.addError — je to jednoduché v odkazu,č který jsem posílal je na začátku jquery.nella.js a tam hned na začátku máš funkci Nella.addError, která se liší tím že přidá za prvek nějaký span místo toho aby dělala alert(message)
- Tomáš Votruba
- Moderator | 1114
Mám stejný problém, soubor na svém místě je (Firebug).
Udělal jsem si úplně základní příklad, ale nic. Verze dev2.0, php
5.3.0.
Aktuální js jsem dnes stáhnul z Gitu, předtím ze stáhnuté verze
dev2.0. Nic.
<meta charset="utf-8">
<?php
include "libs/nette.php";
use Nette\Forms\Form;
?>
<script src="js/netteForms.js"></script>
<?php
/* přihlášovací formulář */
$loginForm = new Form;
$loginForm->setAction("login.php");
$loginForm->addText("login","",20,60)
->getControlPrototype()->placeholder("emailová adresa")
->addRule(Form::FILLED,"Vyplňte login");
$loginForm->addPassword("email","",20,60)
->getControlPrototype()->placeholder("*****")
->addRule(Form::FILLED,"Vyplňte email")
->addRule(Form::EMAIL,"Nesprávný formát emailu");
$loginForm->addSubmit("prihlasit","Přihlásit");
echo $loginForm;
?>
Editoval Schmutzka (9. 5. 2011 11:00)
- Tomáš Votruba
- Moderator | 1114
Jáj, 3hodinové debugování zvítěžilo. Tak chyba byla nakonec v jedné aktivaci funkce (třeba to někoho inspiruje k otevřenějšímu uvažování o možné chybě v kódu a jejímu rychlejšímu odstranění).
<script>
window.onload = function() { // aktivace placeholderu v IE
activatePlaceholders();
}
</scrip>
Stačilo změnit window.onload
na body.onload
a už
to šlape. Díky.