簡體   English   中英

在Cakephp中添加和刪除表單字段

[英]Add and remove form fields in Cakephp

我正在尋找一種在cakephp中有一個表單的方法,用戶可以在提交之前添加和刪除表單字段,環顧四周並在cake IRC上詢問后,答案似乎是使用Jquery,但是經過數小時的環顧我無法制定方法。

我在蛋糕上找到了一個這樣的示例,我在以下網址找到了它-http: //www.mail-archive.com/cake-php@googlegroups.com/msg61061.html,但是經過我的最大努力,我無法使此代碼正常工作(我認為在示例中未列出的調用控制器/模型)

我還找到了一個簡單的jquery示例( http://mohdshaiful.wordpress.com/2007/05/31/form-elements-generation-using-jquery/ ),它可以完成我希望表單執行的操作,但無法解決如何使用Cakephp表單幫助程序使其正常工作並正確命名。 (顯然,$ form helper是php,因此在瀏覽器加載后我無法生成任何內容)。

我是一個蛋糕的新手,並且從未使用過jQuery,因此我對如何做到這一點感到非常困惑,因此,如果有人有Cakephp示例,他們已經在工作,或者可以為我指出完成該任務所需的正確方向,那將非常非常贊賞。

提前致謝

我個人會采用直接的jquery路線。 我想您可以讓PHP生成供jquery插入的代碼(那樣您就可以使用表單幫助器),但是它卻增加了復雜性而又得不到任何好處。

由於表單助手僅生成html,因此請查看您要生成的html。 假設您希望某些東西“添加另一個字段”,當單擊該按鈕時,它將在html中添加另一個字段。 您要添加的html如下所示:

<input type="text" name="data[User][field][0]" />

現在,要使用jquery插入它,我將執行類似將add_field函數綁定到鏈接上的click事件的操作。

    $(document).ready( function() {
      $("#link_id").click( 'add_field' );
      var field_count = 1;
    } );

    function add_field()
    {
      var f = $("#div_addfield");
      f.append( '<input type="text" name="data[User][field][' + field_count + ']" />' );
      field_count++;
    }

當然,如果用戶離開此頁面而沒有提交並返回,則他們會失去進度,但是我認為這與您要完成的工作有關。

這是我刪除元素的方法:

認為,我有這個:

echo $form->input('extrapicture1uploaddeleted', array('value' => 0));

我遵循的邏輯是,按照布爾邏輯,值0表示尚未刪除,而值1表示刪除。

那是一個常規的輸入元素,但是在CSS中,我使用了'display:none'屬性,因為我不希望用戶在表單中看到它。 然后我要做的是,用戶單擊“刪除”按鈕刪除輸入元素以上傳圖片,出現確認消息,並且在確認時,用CSS隱藏的輸入元素的值將從0更改為1:

    $("#deleteextrapicture1").click(
    function() {
        if (confirm('Do you want to delete this picture?')) {
            $('#extrapicture1upload').hide();
            // This is for an input element that contains a boolean value where 0 means not deleted, and 1 means deleted.
            $('#DealExtrapicture1uploaddeleted').attr('value', '1');
        }
        // This is used so that the link does not attempt to take users to another URL when clicked.
        return false;
    }
);

在控制器中,條件$ this-> data ['Deal'] ['extrapicture1uploaddeleted']!='1'表示尚未刪除多余的圖片1(使用JavaScript刪除上傳按鈕)。 $ this-> data ['Deal'] ['extrapicture1uploaddeleted'] =='1'表示圖片已刪除。

我試圖使用輸入的隱藏元素並按照上面說明的方式通過JavaScript更改其值,但是我從CakePHP Security中遇到了黑洞錯誤。 顯然,這不允許我使用JavaScript更改輸入元素的值,然后提交表單。 但是,當我使用常規輸入元素(不是隱藏的)時,我可以使用JavaScript更改它們的值並提交表單而不會出現問題。 我的方法是使用常規輸入元素並用CSS隱藏它們,因為在使用JavaScript更改它們的值然后提交表單時,使用輸入隱藏元素會引發黑洞錯誤。

希望我做的方式可以為使用JavaScript刪除CakePHP中的表單字段提供一種可能的方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM