2016-04-06 13 views
0

私は、シフト情報(以下のスクリーンショット)を入力するためのフォームを持っています。
enter image description here テーブルの値を保持する配列を作成しました。ユーザーは時にボタンをクリックすると「削除」をどのように私はTehcnicianItemsから項目を削除するには クリックしたときに配列アイテムを削除する

$(function() { 
    var TechnicianItems = []; 

    $('#TechnicianAdd').click(function() { 
     var isValidItem = true; 

     if (isValidItem) { 
      var $technicianId = parseInt($('#TechnicianId').val().trim()); 
      var $technicianText = $('#TechnicianId').children("option").filter(":selected").text().trim(); 
      var $shiftId = parseInt($('#ShiftId').val().trim()); 
      var $shiftText = $('#ShiftId').children("option").filter(":selected").text().trim(); 
      var $duration = parseFloat($('#TechnicianDuration').val().trim()); 
      var $break = parseFloat($('#TechnicianBreak').val().trim()); 
      var $comment = $('#TechnicianComment').val().trim(); 

      TechnicianItems.push({ 
       TechnicianId: $technicianId, 
       ShiftId: $shiftId, 
       Duration: $duration, 
       Break: $break, 
       Comment: $comment 
      }); 

      // Clear the fields after insert. 
      $('#TechnicianId').val(''); 
      $('#ShiftId').val(''); 
      $('#TechnicianDuration').val(''); 
      $('#TechnicianBreak').val(''); 
      $('#TechnicianComment').val(''); 

      // Append the newly added entry to #partlogs table. 
      $table = $('#shiftlogs>tbody').last(); 
      $row = $('<tr/>'); 
      $row.append($('<td/>').html($technicianText)); 
      $row.append($('<td/>').html($shiftText)); 
      $row.append($('<td/>').html($duration)); 
      $row.append($('<td/>').html($break)); 
      $row.append($('<td/>').html($comment)); 
      $row.append($('<td/>').html('<input type="button" class="remove" value="Remove" />')); 
      $table.append($row); 

     } //END if(isValidItem) 
    }); // END $('#TechnicianAdd').click() 
}); 
を「追加」をクリックすると、値が配列に追加されますか?私は行を削除しようとしますが、どちらもうまくいきません。

$('.remove').click(function() { 
    $(this).closest('tr').remove(); 
}) 
+1

[イベントが動的に作成された要素を上の結合?]の可能な重複(http://stackoverflow.com/questions/203198/event-binding-on-dynamically -created-elements) – dave

答えて

1

以下は、お客様の要件に似た例です。あなたのケースの.removeにあるクリックイベントリスナーは、イベントリスナーの追加の実行時に、DOMで要素が利用できないため動作していません。だから、書類上のリスナーを追加

function add() { 
 

 
    var str = '<tr><td>' + $('#usrInp').val() + '</td><td> <button class="remove">Remove</button></td></tr>' 
 
    $('table').append(str); 
 
    $('#usrInp').val(""); 
 
} 
 
$(document).on('click', '.remove', function() { 
 
    $(this).closest('tr').remove(); 
 
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 

 
<table> 
 
    <tr> 
 
    <td> 
 
     <input type=text id="usrInp"> 
 
    </td> 
 
    <td> 
 
     <button onclick="add()">Add</button> 
 
    </td> 
 
    </tr> 
 
    <tr> 
 
    <td>Row 1</td> 
 
    <td> 
 
     <button class="remove">Remove</button> 
 
    </td> 
 
    </tr> 
 
    <tr> 
 
    <td>Row 2</td> 
 
    <td> 
 
     <button class="remove">Remove</button> 
 
    </td> 
 
    </tr> 
 
    <tr> 
 
    <td>Row 3</td> 
 
    <td> 
 
     <button class="remove">Remove</button> 
 
    </td> 
 
    </tr> 
 
    <tr> 
 
    <td>Row 4</td> 
 
    <td> 
 
     <button class="remove">Remove</button> 
 
    </td> 
 
    </tr> 
 
</table>

+0

ありがとう、私は行を削除することができます。しかし、それを対応するTechnicianItems配列からどのように削除するのですか? 'Create'ボタンをクリックすると、1つではなく2つの行が作成されます。 – Eric

+0

Arrayから項目を削除するには、削除した項目のインデックスを見つけて、trにdata-index属性を格納しますこの属性を読み取り、splice()メソッドを使用して要素を削除します。複数の行の作成に関しては、どの要素にidが 'TechnicianAdd'であるのか教えてください。 –

+0

まだIDがありません。 idは挿入時に生成されます。これは親子関係であり、受注および受注の詳細フォームと同様です。送信ボタンを押すとすべてが挿入されます。私が使用できるIDはありません。 – Eric

関連する問題