Disabled na základě zaškrtnutého checkboxu
- 22
- Člen | 1478
pilec napsal(a):
To nema s nette moc spolecneho, uvedeneho chovani dosahnes jednoduchym JS.
Jaktože to s Nette nemá nic společnýho??
Pokud máš v definici formu prvek nastavený přes setDisabled(), tak vám
jednoduchý javascript určitě nepomůže, protože vám Nette zahodí
disablovaný element při submitu.
Editoval 22 (7. 8. 2011 23:03)
- Ladis-s
- Člen | 53
22 napsal(a):
pilec napsal(a):
To nema s nette moc spolecneho, uvedeneho chovani dosahnes jednoduchym JS.
Jaktože to s Nette nemá nic společnýho??
Pokud máš v definici formu prvek nastavený přes setDisabled(), tak vám jednoduchý javascript určitě nepomůže, protože vám Nette zahodí disablovaný element při submitu.
S tím jsem se už setkal když jsem pracoval s disabled prvkama. Jak to tedy elegantně řešit v Nette?
- 22
- Člen | 1478
je to složitější :-)
<?php
use Nette\Application\UI\Form;
class HomepagePresenter extends BasePresenter
{
protected function createComponentTest()
{
$session = $this->context->session->getSection('disabled');
$form = new Form();
$form->addText('text', 'Text:')
->setDisabled(!isset($session->disabled));
$form->addCheckbox('checkbox', 'Enable me');
$form->addSubmit('ok', 'OK');
$form->onSuccess[] = callback($this, 'ok');
return $form;
}
public function ok(Form $form)
{
$session = $this->context->session->getSection('disabled');
unset($session->disabled);
dump($form->values);
}
public function handleDisable()
{
$session = $this->context->session->getSection('disabled');
$session->disabled = TRUE;
}
}
<!-- někde v šabloně -->
{control test}
<script type="text/javascript">
$(function(){
$('input:checkbox').live('change', function(){
$('#frmtest-text').removeAttr('disabled');
$.get('?do=disable');
});
});
</script>
Editoval 22 (7. 8. 2011 23:15)
- Jan Endel
- Člen | 1016
22 napsal(a):
pilec napsal(a):
To nema s nette moc spolecneho, uvedeneho chovani dosahnes jednoduchym JS.
Jaktože to s Nette nemá nic společnýho??
Pokud máš v definici formu prvek nastavený přes setDisabled(), tak vám jednoduchý javascript určitě nepomůže, protože vám Nette zahodí disablovaný element při submitu.
To jsem si neuvědomil, pardon.
- 22
- Člen | 1478
bude to chtít upravit třeba nějak takto:
...
public function handleDisable($value)
{
$session = $this->context->session->getSection('disabled');
if ($value === 'true') {
$session->disabled = $value;
} else {
unset($session->disabled) ;
}
}
...
<script type="text/javascript">
$(function(){
$('input:checkbox').live('change', function(){
var value = $(this).is(':checked');
if (value) {
$('#frmtest-text').removeAttr('disabled');
} else {
$('#frmtest-text').attr('disabled', 'disabled');
}
$.get('?do=disable', { value: value });
});
});
</script>
Editoval 22 (8. 8. 2011 1:19)