Disabled na základě zaškrtnutého checkboxu

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Ladis-s
Člen | 53
+
0
-

Jak můžu jednoduše aktivovat input-textbox na základě zaškrtnutého checkboxu? Chci aby byl defaultně disabled a po zaškrtnutí checkboxu se aktivoval. Po odškrtnutí se opět deaktivuje.

Díky

Jan Endel
Člen | 1016
+
0
-

To nema s nette moc spolecneho, uvedeneho chovani dosahnes jednoduchym JS.

Ladis-s
Člen | 53
+
0
-

Právě že se mi to zatím nijak nepodařilo, tak zjišťuji, jestli to nějak neumí Nette. Poradíte mi někdo, jak to vyřešit v JS? Díky

OK3
Člen | 91
+
0
-

Nějak takhle? Uvažuju jQuery a idčka těch formulářových prvků.

<script>
$('#checkbox').click(function() {
	$('#textbox').attr('disabled', ! $(this).attr('checked'));
});
</script>
22
Člen | 1478
+
0
-

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
+
0
-

Nějak to nechodí. Dal jsem do hlavičky:

<?php
<script type="text/javascript" src="http://code.jquery.com/jquery-latest.js"></script>
?>

Zkouším jestli vůbec ta funkce funguje a asi ne:

<?php
	$('#frmaddForm-newmodule').click(function() {
	alert('a');
	});
?>
Ladis-s
Člen | 53
+
0
-

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
+
0
-

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
+
0
-

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.

Ladis-s
Člen | 53
+
0
-

Super, díky moc za podrobný návod ;-). Už mi to funguje.
Jak to udělám, když budu chtít to odškrtnutí toho checkboxu opět zneaktivnit ten textbox?

čekal bych něco jako: $(‚#frmaddForm-module_text‘).attr(‚disabled‘); , ale to nefunguje

22
Člen | 1478
+
0
-

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)

22
Člen | 1478
+
0
-

..ale možná bych na tvém místě zvážil použití vestavěné funkce toggle, viz. examples/forms v distribuci, pokud ten input nemusí být viditelný.

Ladis-s
Člen | 53
+
0
-

Super díky, to přesně jsem potřeboval. Toggle je pro mě ideální. ;-)