动态添加php生成的表单元素

I have the following form generated form a php class called 'form'. In this form i have a section which need to add multiple form elements dynamically (the table with id="pro_tasks").

In this form user should be able to add more tasks.

    <?php 
        h2("Add Project");

        echo $form->create(array(   'id'        =>'addProject',
                                    'name'      =>'addProject',
                                    'method'    =>'get',
                                    'action'    =>'index.php'));

             $form->open_fieldset();
        onebreak();
             $form->legend("Project Detals");

        echo $form->text  (array(   'id'        =>'pro_name',
                                    'label'     =>'Project Name : ',
                                    'name'      =>'pro_name',
                                    'required'  =>'required',
                                    'length'    =>255));  
        twobreaks();
        echo $form->select(array(   'id'        =>'pro_type',
                                    'label'     =>'Project Type : ',
                                    'name'      =>'pro_type',
                                    'data'      =>$form->option_array("SELECT DISTINCT id,pro_type 
                                                                       FROM project_types", 
                                                                       'id', 'pro_type')));
        twobreaks();
        echo '<label for="client">Client : </label> 
              <input type="radio" name="NA" value="company" checked="checked">Company
              <input type="radio" name="NA" value="person">Person';
        echo '<div id="client">';
        //The client list generated inside this dive tag, based on the redio button selected above
        //The Company list has selected by default
        echo '<div id="companydiv">';
        echo $form->select(array(  'id'        =>'client',
                                   'label'     =>' ',
                                   'name'      =>'client',
                                   'data'      =>$form->option_array("SELECT DISTINCT id, name
                                                                      FROM companies
                                                                      WHERE addressbook_id='1' OR addressbook_id='2' OR addressbook_id='3' OR addressbook_id='4'",
                                                                     'id', 'name')));
        echo '</div>';
        echo '</div>';

        twobreaks();
        echo $form->date  (array(  'id'        =>'start_date',
                                   'label'     =>'Start Date : ',
                                   'name'      =>'start_date',
                                   'required'  =>'required',
                                   'class'     =>'datepicker',
                                   'length'    =>255)); 
        bigspace();
        echo $form->date  (array(  'id'        =>'comp_date',
                                   'label'     =>'Completion Date : ',
                                   'name'      =>'comp_date',
                                   'required'  =>'required',
                                   'class'     =>'datepicker',
                                   'length'    =>255));

        twobreaks();
        echo $form->select  (array('id'        =>'status',
                                   'label'     =>'Project Status : ',
                                   'name'      =>'status',
                                   'data'      =>array('pending'    =>'pending', 
                                                       'ongoing'    =>'ongoing', 
                                                       'suspended'  =>'suspended', 
                                                       'terminated' =>'terminated', 
                                                       'completed'  =>"completed"),
                                   'value'=>'pending'));

        twobreaks();
        echo $form->select(array(  'id'        =>'resp_id',
                                   'label'     =>'Responsibility',
                                   'name'      =>'resp_id',
                                   'data'      =>$form->option_array("SELECT DISTINCT id, CONCAT( first_name,  ' (',user_type,')') AS resp_name
                                                                      FROM users
                                                                      WHERE status='ACTIVE'",
                                                                     'id', 'resp_name')));

        twobreaks();
        echo $form->select  (array('id'        =>'priority',
                                   'label'     =>'Priority : ',
                                   'name'      =>'priority',
                                   'data'      =>array('low'        =>'low', 
                                                       'moderate'   =>'moderate', 
                                                       'high'       =>'high',),
                                   'value'=>'low'));

        twobreaks();
        echo $form->textBox(array ('id'        =>'description',
                                   'label'     =>'Description : ',
                                   'name'      =>'description',
                                   'columns'   =>'50',
                                   'rows'       =>'5'));

        twobreaks();
        echo $form->text(array    ('id'        =>'tec',
                                   'label'     =>'Total Estimated Cost (Rs) : ',
                                   'name'      =>'tec'));

        twobreaks();
        echo $form->textBox(array  ('id'        =>'remarks',
                                    'label'     =>'Remarks : ',
                                    'name'      =>'remarks'));
        twobreaks();

            $form->close_fieldset();

            $form->open_fieldset();
        onebreak();
            $form->legend("Project Tasks");
    ?> 
        <div class="overflowTable">
            <table id="pro_tasks">
                <tr align="center" class="FormTableHeader">
                    <th>Task Name       </th>
                    <th>Start Date      </th>
                    <th>Completion Date </th>
                    <th>Responsibility  </th>
                    <th>Status          </th>
                    <th>TEC             </th>
                    <th>Description     </th>
                </tr>
                <?php //Need some code to repeat the rows when this is a update form?>
                <tr id="task">
                    <td> <?php echo $form->text  (array('id'        =>'task_name',
                                                        'name'      =>'task_name[]', 
                                                        'required'  =>'required'));?>  </td>

                    <td> <?php echo $form->date  (array('id'        =>'tsk_start_date',
                                                        'name'      =>'tsk_start_date[]', 
                                                        'required'  =>'required',
                                                        'class'     =>'datepicker',));?>  </td>

                    <td> <?php echo $form->date  (array('id'        =>'tsk_comp_date',
                                                        'name'      =>'tsk_comp_date[]', 
                                                        'required'  =>'required',
                                                        'class'     =>'datepicker',));?>  </td>

                    <td> <?php echo $form->select(array('id'        =>'assignedto',
                                                        'name'      =>'assignedto[]',
                                                        'data'      =>$form->option_array("SELECT DISTINCT id, CONCAT( first_name,  ' (',user_type,')') AS resp_name
                                                                                           FROM users
                                                                                           WHERE status='ACTIVE'",
                                                                                          'id', 'resp_name')));?></td>

                    <td> <?php echo $form->select(array( 'id'       =>'tsk_status','name'=>'tsk_status[]', 
                                                         'required' =>'required',
                                                         'data'     =>array('pending'       =>'pending',
                                                                            'ongoing'       =>'ongoing',
                                                                            'suspended'     =>'suspended',
                                                                            'terminated'    =>'terminated',
                                                                            'completed'     =>'completed'),
                                                         'value'    =>'pending'));?> </td>

                    <td><?php echo $form->text   (array('id'        =>'tec','name'=>'tec[]'));?> </td>
                    <td><?php echo $form->textBox(array('id'        =>'description','name'=>'description[]'));?></td>
                 </tr>
             </table>
         </div>
         <div id="addProject_errorloc" class="error_strings"></div>

         <img src="../../images/add.png"    alt="addtask"  id="addtask">
         <img src="../../images/remove.png" alt="removetask"  id="removetask">

            <?php
                 $form->close_fieldset();
            echo $form->submit(array('id'=>'submit', 'name'=>'submmit'));                
            echo $form->close();
            ?>

Since these form element generated by php i cannot just use JavaScripts to generate the task row dynamically. So, i created another php page which can generate the task row and added to the form using jQuery GET method as bellow

    <?php require_once(dirname(__FILE__).'/../../../includes/initialize.php');
    $rowCount="";
    if(isset($_GET['rowCount'])){
    $rowCount = $_GET['rowCount'];
    }
    ?>
 <tr id="task">
 <td> <?php echo $form->text  (array('id'        =>'task_name',
                                    'name'      =>'task_name['.$rowCount.']', 
                                    'required'  =>'required'));?>  </td>

<td> <?php echo $form->date  (array('id'        =>'tsk_start_date',
                                    'name'      =>'tsk_start_date['.$rowCount.']', 
                                    'required'  =>'required',
                                    'class'     =>'datepicker',));?>  </td>

<td> <?php echo $form->date  (array('id'        =>'tsk_comp_date',
                                    'name'      =>'tsk_comp_date['.$rowCount.']', 
                                    'required'  =>'required',
                                    'class'     =>'datepicker',));?>  </td>

<td> <?php echo $form->select(array('id'        =>'assignedto',
                                    'name'      =>'assignedto['.$rowCount.']',
                                    'data'      =>$form->option_array("SELECT DISTINCT id, CONCAT( first_name,  ' (',user_type,')') AS resp_name
                                                                       FROM users
                                                                       WHERE status='ACTIVE'",
                                                                      'id', 'resp_name')));?></td>

<td> <?php echo $form->select(array( 'id'       =>'tsk_status','name'=>'tsk_status['.$rowCount.']', 
                                     'required' =>'required',
                                     'data'     =>array('pending'       =>'pending',
                                                        'ongoing'       =>'ongoing',
                                                        'suspended'     =>'suspended',
                                                        'terminated'    =>'terminated',
                                                        'completed'     =>'completed'),
                                     'value'    =>'pending'));?> </td>

<td><?php echo $form->text   (array('id'        =>'tec','name'=>'tec['.$rowCount.']'));?> </td>
<td><?php echo $form->textBox(array('id'        =>'description','name'=>'description['.$rowCount.']'));?></td>

    $(document).ready(function(){
    $("#addtask").click(
         function(){
           var rowCount = $('#pro_tasks tr').length;
           $.ajax({
               url: "task.php?rowCount="+rowCount,
               type: "GET",
              success: function(data){
                  $("tbody").append(data);//Do something here with the "data"
              }
           });

        });
      });

All of the codes above works correctly except the (var rowCount = $('#pro_tasks tr').length;). That does not counts the number of rows in the table. therefore i cannot identify the dynamically generated rows separately.

All the times, row count is 2...

I'm not an expert in this field, please be good enough to advise me on this issue.

Thanks.

It should be

var rowCount = $('#pro_tasks tr').length;

you forgot the hash-sign (for an id).

I think that, there is a caching in my javascript.

So, instead of sending rowCount with the url, I used the following code. Problem solved. :)

    $(document).ready(function(){
      $("#addtask").click(
         function(){
            $.ajax({
                url: "task.php",
                type: "GET",
                  success: function(data){
                  $("tbody").append(data);
            }
         });

});
$('#submit').click(function(){
    $('#pro_tasks tr').each(function(index,item){
        $('input#task_name',item).attr('name','task_name['+index+']');
        $('input#tsk_start_date',item).attr('name','tsk_start_date['+index+']');
        $('input#tsk_comp_date',item).attr('name','tsk_comp_date['+index+']');
        $('select#assignedto',item).attr('name','assignedto['+index+']');
        $('select#tsk_status',item).attr('name','tsk_status['+index+']');
        $('input#tec',item).attr('name','tec['+index+']');
        $('textarea#description',item).attr('name','description['+index+']');
    });
});

});

when submitting the form, this function add row number to each name.

Thanks