2011-05-02 27 views
1

當用戶添加事件時,他們需要能夠將「band」表中的band添加到事件中。它已經全部通過HABTM進行設置,並且在將多個選擇框硬編碼到頁面時,我可以使用它。使用CakePHP動態添加選擇輸入

問題是 - 我想只有一個選擇框,然後是「添加另一個樂隊」按鈕 - 這將添加另一個選擇輸入與樂隊列表 - 等等 - 儘可能多的他們會喜歡。

我發現這個職位:Add and remove form fields in Cakephp它解釋瞭如何動態添加一個字段...我的問題是,樂隊列表是巨大的,並定期更改,所以我無法想象這對我工作。

任何關於這方面的最佳途徑的想法? - 動態地添加一個選擇輸入,並使用我的數據庫中的樂隊列表進行填充? Ajax可能嗎? (我不知道如何用蛋糕做Ajax)Ajax似乎沒問題,但是我真的想在每次用戶點擊「添加樂隊」按鈕時拉出樂隊列表嗎?也許沒關係?

任何幫助/方向非常感謝。代碼示例很棒,但如果沒有其他的話,向正確的方向推動將會非常有幫助。

+0

請停止在問題標題中寫標籤。 – 2011-05-02 16:35:08

+0

@Tom - 所以我應該使標題「動態添加」? – Dave 2011-05-02 17:06:09

+0

@Dave:「動態添加選擇輸入」。問題是關於CakePHP的事實在於問題標籤中。 – 2011-05-02 17:12:22

回答

3

您可以使用單個選擇輸入和「添加樂隊」按鈕。當用戶點擊「添加樂隊」時,使用javascript捕捉事件,將選定的樂隊複製到列表中(直觀地),並將該ID添加到隱藏輸入(在提交表單時使用)。下面的jQuery/CakePHP示例。

<ul id='band_list'></ul> 
<?php echo $form->create('Event', array('id'=>'event_form'));?> 
<?php echo $form->input('band_ids', array('type'=>'hidden', 'id'=>'band_ids')); ?> 
<?php echo $form->input('bands', array('type'=>'select', 'options'=>$bands, 'id'=>'bands_selector')); ?> 
<button id='add_band'>Add Band</button> 

<script type='text/javascript'> 
    var band_count = 0; 
    $('#add_band').click(function(event) { 
     event.preventDefault(); 
     $('<li>' + $('#bands_selector option:selected').text() + '</li>').appendTo('#band_list'); 
     $('<input type="hidden" name="data[Band][Band]['+band_count.toString()+']" value="'+$("#bands_selector option:selected").val()+'">').appendTo('#event_form'); 
     band_count++; 
    }); 
</script> 
+0

哦..我喜歡這個想法...會嘗試一下,謝謝!如果/當我開始工作時將會標記爲答案,但是 - 聽起來像是一個很好的方式! – Dave 2011-05-02 17:08:47

+0

按鈕字面上只是刷新頁面...... :(我認爲我正在做所有事情,就像你上面有什麼想法? – Dave 2011-05-02 19:17:43

+0

Yah - 即使在我複製/粘貼代碼的測試頁上,它也不能正常工作。我驗證了我包括jquery.js(/jquery/1.5/jquery.min.js) – Dave 2011-05-02 19:26:40