Ako získať text z checkboxu z odoslaného formulára?

Takeshi
Člen | 596
+
0
-

Ahojte,
ako získam text z textboxu po odoslaní formulára?

public function createComponentTest()
{
    $form = new Form;
    $form->addCheckbox('chckMeno','AAA text na zobrazenie');
    ...
}

public function sendFormSucceeded(Form $form)
{
    $value = $form->getValues();
    echo ... $value['chckMeno']; .... zobrazi mi bool ... ja potrebujem zobrazit ... text/label textBoxu ... /*AAA text na zobrazenie*/
}
Rndoom04
Člen | 72
+
0
-

Ahoj. V první řadě doporučuji ten formulář lehce zjednodušit a určitě přidat ke komponentě ->setValue(); Testování odeslaných dat nedělej formou echo, ale dump(); die();.

protected function createComponentTestForm()
    {
        $form = new UI\Form;
        $form->setMethod("POST");

        $form->addCheckbox("chckMeno", "AAA text na zobrazenie")
            ->setValue("hodnota");

        $form->addProtection('Vypršel časový limit. Odešlete prosím formulář znovu.');

		/* Další komponenty a submit button */

        $form->onSuccess[] = function(\Nette\Application\UI\Form $form) {
            $values = $form->getValues();

            if (!empty($values)) {
				// Otestovat přijatá data
                dump($values);
                die();
            }
        };
        return $form;
    }

Editoval Rndoom04 (11. 5. 2023 19:59)

Takeshi
Člen | 596
+
0
-

Ja mám viacero checkboxov a chcem urobiť nasledovné operácie

1.) bol daný checkbox zaškrknutý?
2.) ak áno, tak ukáž zobraz jeho text

… preto neviem ako by som toto konkrétne použil

Rndoom04
Člen | 72
+
0
-

V tomto případě to můžeš udělat i bez setValue(). Ten je vhodný k tomu, když si tam chceš poslat vlastní hodnotu se kterou to chceš porovnávat, ale v hromadě případů stačí bool (true/false).

protected function createComponentTestForm()
    {
        $form = new UI\Form;
        $form->setMethod("POST");

        $form->addCheckbox("checkbox1", "Checkbox 1");

        $form->addCheckbox("checkbox2", "Checkbox 2");

        $form->addCheckbox("checkbox3", "Checkbox 3");

        $form->addSubmit('submit', 'Odeslat');

        $form->addProtection('Vypršel časový limit. Odešlete prosím formulář znovu.');

        $form->onSuccess[] = function(\Nette\Application\UI\Form $form) {
            $values = $form->getValues();

            if (!empty($values)) {
		// Otestovat přijatá data
                dump($values);
                die();
            }
        };
        return $form;
    }

Pokud zaškrtnu první a třetí, dostanu:

checkbox1: true
checkbox2: false
checkbox3: true

Ten, který byl zaškrtnutý, tak u něho dostanu true. U ostatních false. Podmínku pak můžeš udělat klasicky přes if:

if ($values->checkbox1) { /* Some magic */}
// nebo
if ($values->checkbox1 == true) { /* Some magic */}

Edit: Jo počkej, ty si nechceš hrát vyloženě s formulářem jako komponentou, ale s HTML zobrazením. Chápu to správně teďka? Na to můžeš použít třeba jQuery.

if ($('input.checkbox1').prop('checked')) {
    /* some magic */
}

A to můžeš dát do nějakého listeneru, třeba:

$(document).on("change", "input.checkbox1", function(){ /* Some magic */ });

Editoval Rndoom04 (11. 5. 2023 23:08)

dakur
Člen | 493
+
+1
-

Např. takto:

private Checkbox $checkbox;

public function createComponentTest()
{
    $form = new Form;
    $this->checkbox = $form->addCheckbox('chckMeno','AAA text na zobrazenie');
    ...
}

public function sendFormSucceeded(Form $form)
{
    $value = $form->getValues();
    echo ... $value['chckMeno']; .... zobrazi mi bool ... ja potrebujem zobrazit ... text/label textBoxu ... /*AAA text na zobrazenie*/
	echo $this->checkbox->getLabel(); // nebo getLabelPart() nebo getLabelControl(), zkus, co to bude vracet
}

Editoval dakur (12. 5. 2023 8:30)