Selectbox keys == values a dvojita mezera
- stefi023
- Člen | 71
Zdravim,
narazil jsem na takovy problem, pokud vytvorim formular se Selectboxem, jehoz
polozky ($items) budou asociativni pole, kde klic bude stejny jako hodnota a
mezi nima bude polozka, ktera ma vice mezer za sebou,
napr:
<?php
$items = array(
'TE ST' => 'TE ST',
'TE ST' => 'TE ST',
);
?>
jelikoz je v metode SelectBox::getControl
$option->value($key2 === $value2 ? NULL : $key2)
tak se pri stejnych keys a values vubec value
u option
nezapise… proc taky, kdyz si prohlizec bere automaticky hodnotu mezi
<option>xxx</option>
, ale v pripade, kdy tam je vice
mezer za sebou, nektere prohlizece toto znasobeni mezer ignoruji. Tzn na vystupu
getValue() je NULL jelikoz neni v pripustnych hodnotach.
Tzn neni mozne zvolit druhou hodnotu TE__ST
. (podtrzitko znazornuje
mezeru – i zde se zdvojeni napravuje)
Problem se objevuje v prohlizecich Firefox, IE, Seamonkey, Opera, naopak
v pohode je to v Chrome…
Je proti necemu, kdybych tu podminku
$key2 === $value2 ? NULL : $key2
pri generovani optionu
u selecboxu vyhodil?
TESTCASE:
<?php
class HomepagePresenter extends BasePresenter
{
protected function createComponentForm($name) {
$form = new Nette\Application\UI\Form($this,$name);
$items = array(
'TE ST' => 'TE ST',
'TE ST' => 'TE ST',
);
$form->addSelect('items','Items',$items);
$form->addSubmit('save');
$form->onSuccess[] = callback($this,'save');
}
public function save($form) {
Nette\Diagnostics\Debugger::barDump($form['items']->getValue(),'ITEM');
}
}
?>
Editoval stefi023 (8. 12. 2011 22:10)
- bojovyletoun
- Člen | 667
mám 2 nápady
- zkus SelectBox::$useKeys
- zkus hodnoty pole nedávat jako text, ale jako Html. Můžeš tam experimenotvat s těmi mezerami
Příklad
$c->addSelect("view", null, array_map(
function($r) {
$it = Nette\Utils\Html::el('option')
->setText($r->jmeno)->value($r->id);
if ($r->color) {
$it->style("background: $r->color");
}
return $it;
}, $items);
- stefi023
- Člen | 71
1)
No $useKeys dela neco trosku jineho…
pokud $items neni asociovane pole, tak v pripade kdy $useKeys = true (coz je
default), nahodi ciselne hodnoty do „value“ (0,1,2,…)
pokud $useKeys = false, tak se tyto „value“ nepouzije…
2)
hodnoty jako HTML? to mi prijde trochu nestastne – navic podle nette
stylu – „write less, do more“ by se to asi imho melo chovat obracene…
navic kdyz to nekdo nebude tusit, tak jak pak k tomu prijde, bude zdlouhave
debugovat proc mu to nejde – stejne jako ja :)