2012-11-01 49 views
1

我正在使用CakePHP 2.2.3生成一個radioset,然後應用jQuery buttonset。jQuery buttonset和帶有隱藏值的CakePHP收音機設置

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,還有一個隱藏字段共享相同的名稱作爲無線電集。這樣做是爲了當提交表單時,即使未選擇radiume,我仍然會在我的請求 - >數據中得到一個值(雖然是空白的)。

但是,當選擇其中一個選項時,jQuery UI按鈕設置代碼並不喜歡這樣做,因爲它期望所有共享表單中選定廣播選項名稱的元素都具有與它們關聯的按鈕小部件。在這一點上,associate jQuery UI ticket是wontfix。

我不願意向CakePHP提交一張票,因爲有一個隱藏的字段與默認值相同的名稱爲非選定的收音機是一種合法的做法。

這個jsFiddle顯示了一個例子。您需要打開您的JavaScript控制檯才能在選擇按鈕時查看生成的錯誤。

回答

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

但我想看看是否有更好的選擇。

相關問題