0

「フォーム」と呼ばれるphpクラスから次のフォームを生成しました。このフォームには、複数のフォーム要素を動的に追加する必要があるセクションがあります (id="pro_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();
            ?>

これらのフォーム要素はphpによって生成されるため、JavaScriptを使用してタスク行を動的に生成することはできません。そこで、タスク行を生成できる別の php ページを作成し、次のように jQuery GET メソッドを使用してフォームに追加しました。

    <?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"
              }
           });

        });
      });

(var rowCount = $('#pro_tasks tr').length;) 以外の上記のコードはすべて正しく機能します。これは、テーブル内の行数をカウントしません。したがって、動的に生成された行を個別に識別することはできません。

いつも、行数は2...

私はこの分野の専門家ではありません。この問題についてアドバイスをお願いします。

ありがとう。

4

2 に答える 2

3

そのはず

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

(ID の) ハッシュ記号を忘れました。

于 2013-06-22T09:11:41.007 に答える
1

私のjavascriptにはキャッシュがあると思います。

そこで、url で rowCount を送信する代わりに、次のコードを使用しました。問題が解決しました。:)

    $(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+']');
    });
});

});

フォームを送信するとき、この関数は各名前に行番号を追加します。

ありがとう

于 2013-06-22T17:23:07.083 に答える