1

我正在使用 CakePHP 2.2.3 生成一个无线电集,然后我将一个 jQuery 按钮集应用到该无线电集。

CakePHP 片段:

echo $this->Form->input('contact_address_type', array(
    'type' => 'radio',
    'legend' => false,
    'options' => array('domestic' => 'Domestic', 'po_box' => 'Domestic PO Box', 'foreign' => 'Foreign'),
    'div' => array('class' => 'contact address_type')
));

jQuery UI 片段:

$('.contact.address_type').buttonset();

生成 HTML 时,有一个隐藏字段与收音机集同名。这样做是为了在提交表单时,即使未选择无线电集,我仍然会在我的 request->data 中获得一个值(尽管是空白)。

但是,jQuery UI 按钮集代码在选择其中一个选项时不喜欢这样,因为它希望表单中与所选单选选项名称相同的所有元素都具有与之关联的按钮小部件。此时,关联的 jQuery UI 票证是 wontfix 。

我不愿意向 CakePHP 提交票证,因为有一个具有相同名称的隐藏字段来默认未选择的无线电集的值是一种合法的做法。

这个jsFiddle展示了一个例子。您需要打开 javascript 控制台才能在选择按钮时查看生成的错误。

4

1 回答 1

0

一种可能的答案是生成一个没有标签的虚假单选选项。

这将阻止它包含在呈现的按钮集中,但它仍然会获得一个附加到它的按钮对象。您还需要将单选默认设置为选中,这样如果没有选择其他按钮,则将提交该默认值。

echo $this->Form->input('contact_address_type', array(
    'type' => 'radio',
    'legend' => false,
    'options' => array('domestic' => 'Domestic', 'po_box' => 'Domestic PO Box', 'foreign' => 'Foreign'),
    'value' => false,
    'before' => $this->Form->radio('contact_address_type', array('' => ''), array('legend' => false, 'checked' => 'checked', 'value' => false, 'label' => false)),
    'div' => array('class' => 'contact address_type')
));

另一种选择是强制用户进行默认选择,因此您知道将选择一个选项。

echo $this->Form->input('contact_address_type', array(
    'type' => 'radio',
    'legend' => false,
    'options' => array('domestic' => 'Domestic', 'po_box' => 'Domestic PO Box', 'foreign' => 'Foreign'),
    'value' => 'domestic',
    'div' => array('class' => 'contact address_type')
));

但我想看看是否有更好的选择。

于 2012-11-01T03:43:36.647 回答