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が生成されると、無線セットと同じ名前を共有する非表示フィールドがあります。これは、フォームが送信されたときに、ラジオセットが選択されていない場合でも、リクエスト->データに値(空白ではありますが)を取得するために行われます。

ただし、jQuery UIボタンセットコードは、オプションの1つを選択するときにこれを好みません。これは、フォームで選択したラジオオプションの名前を共有するすべての要素に、ボタンウィジェットが関連付けられていることを想定しているためです。この時点で、関連するjQueryUIチケットはwontfixです。

選択されていないラジオセットの値をデフォルトにするために同じ名前の非表示フィールドを持つことは正当な慣行であるため、私はCakePHPにチケットを提出するのが嫌いです。

このjsFiddleは例を示しています。ボタンが選択されたときに生成されるエラーを確認するには、JavaScriptコンソールを開く必要があります。

4

1 に答える 1

0

考えられる答えの1つは、ラベルのない偽のラジオオプションを生成することです。

これにより、レンダリングされたボタンセットに含まれなくなりますが、ボタンオブジェクトがアタッチされます。また、ラジオをデフォルトでチェックする必要があります。これにより、他のボタンが選択されていない場合、そのデフォルト値が送信されます。

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')
));

もう1つのオプションは、ユーザーにデフォルトの選択を強制することです。これにより、オプションが選択されることがわかります。

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 に答える