Formulář a propojení s JavaScriptem
- tondovo
- Člen | 10
Ahoj,
z Nette bych chtěl zatím použít jen formuláře, ale nevím, jak je
propojit s JavaScriptem (případně AJAXem). Uvedený JS kód nefunguje,
protože Nette přidává do názvu ‚-‘. Jak to lze vyřešit?
<script src=„netteForms.js“></script>
<script>
function vytvorkod(){
var jmeno = document.getElementById(‚frmoperator-jmeno‘);
var prijmeni = document.getElementById(‚frmoperator-prijmeni‘);
var kod = jmeno.value.substring(0,1) + prijmeni.value.substring(0, 2);
kod = kod.toLowerCase();
return kod;
}
</script>
<?php
require_once '../minified/NForms.php';
$form = new NForm('operator');
$form->addGroup('Jméno');
$form->addText('jmeno', 'Jméno: ')
->addRule(NForm::FILLED, 'Jméno musí být vyplněno.');
$form->addText('prijmeni', 'Příjmení: ')
->addRule(NForm::FILLED, 'Příjmení musí být vyplěno.')
->getControlPrototype()->onBlur('this.form.frm-operatorkod.value = vytvorkod();');
$form->addText('operatorkod', 'Kód: ');
$form->addGroup();
$form->addSubmit('ulozit', 'Uložit');
if ($form->isSubmitted()) {
// submitted and valid
$hodnoty = $form->getValues();
var_dump($hodnoty);
}
echo $form;
?>
- duke
- Člen | 650
Místo
this.form.frm-operatorkod.value = vytvorkod();
lze použít
this.form['frm-operatorkod'].value = vytvorkod();
Můžeš použít také např. jquery:
$('#frm-operatorkod').val(vytvorkod());
Nicméně doporučuji spíše použít unobtrusive javascript (nejlíp s jquery), než přímo nastavovat atribut onblur. Např. takto:
$('#frm-prijmeni').blur(function () {
$('#frm-operatorkod').val(vytvorkod());
});
Krom toho můžeš u jednotlivých prvků formuláře nastavit vlastní id
metodou setHtmlId
.
Editoval duke (25. 12. 2011 2:58)