2016-11-15 2 views
0

So habe ich eine Tabelle, in der der Benutzer etwas eingeben wird und in der letzten Spalte wird es automatisch auf der Grundlage der Eingabe der anderen Spalten ausgefüllt werden. Es funktioniert gut genug, aber sobald ich der Tabelle eine weitere Zeile hinzufüge, füllt es nicht die letzte Spalte wie die ursprüngliche Zeile.jquery funktioniert nicht bei dynamisch hinzugefügten Tabellenzeilen

Also meine Frage ist, was ist falsch und wie kann ich das beheben?

Danke!

Skript für das Hinzufügen von Zeilen:

$('.add_row_count').on('click',function(){ 
event.preventDefault(); 
var newRow = $('<tr><td style = "text-align: center;"><input type="text" name="categ_name[]" id="categ_name" value="" placeholder="Item Category" required></td> ' + 
'<td style = "text-align: center;"><input type="number" name="beg_count[]" id="beg_count" value="" placeholder="BEG Count" required></td>' + 
'<td style = "text-align: center;"><input type="number" name="del_count[]" id="del_count" value="" placeholder="DEL Count" required></td>' + 
'<td style = "text-align: center;"><input type="number" name="ret_count[]" id="ret_count" value="" placeholder="RET Count" required></td>' + 
'<td style = "text-align: center;"><input type="number" name="exc_count[]" id="exc_count" value="" placeholder="EXC Count" required></td>' + 
'<td style = "text-align: center;"><input type="number" name="pout_count[]" id="pout_count" value="" placeholder="P-Out Count" required></td>' + 
'<td style = "text-align: center;"><input type="number" name="sales_count[]" id="sales_count" value="" placeholder="SALES Count" required></td>' + 
'<td style = "text-align: center;"><input type="number" name="end_count[]" id="end_count" value="" placeholder="END Count" required></td>' + 
'<td style = "text-align: center;"><input type="number" name="actual_count[]" id="actual_count" value="" placeholder="Actual Count" required></td>' + 
'<td style = "text-align: center;"><input type="number" name="variance[]" id="variance" value="" placeholder="Variance" readonly></td>' + 
'<td style="border-top: 1px solid white; border-bottom: 1px solid white; border-right: 1px solid white"><button class="del" id="delete_row_count" type="button" onclick="deleterow_count();">Delete row</button></td></tr>'); 
$('table.count').append(newRow); 
}); 

Skript für die letzte Spalte bevölkert:

 $('#categ_name,#beg_count, #del_count, #ret_count,#exc_count, #pout_count, #sales_count,#end_count, #actual_count, #variance').keyup(function(){ 

    var end = $('#end_count').val(); 
    var ac = $('#actual_count').val(); 

    var total_variance = end - ac; 


    $('#variance').val(total_variance);  
    }); 

Geige: https://jsfiddle.net/qhk3ha75/3/

+1

Ein Grund könnte etwas mit der Tatsache, was Sie tun müssen eindeutige ID-Namen haben. Sie können keine Zeilen mit denselben Werten für IDs hinzufügen. – Rasclatt

+3

Mögliches Duplikat von [Ereignisbindung an dynamisch erzeugten Elementen?] (Http://stackoverflow.com/questions/203198/event-binding-on-dynamically-created-elements) – DelightedD0D

+1

Dupe Frage, aber kurz gesagt, benutze '$ (' table '). on (' click ',' .add_row_count ', function() {.... '(das heißt, zusätzlich zu den ids in Klassen ändern) – DelightedD0D

Antwort

0

Was Sie wirklich brauchen, ist classes im gesamten Code zu nutzen und zu Verwenden Sie event delegation, um auf Ereignisse auf dynamic elements zu hören. Hier

ist ein Beispiel Lösung:

jsFiddle

var $tbody = $('#count tbody'); 
 
$('.add_row_count').on('click', function() { 
 
    event.preventDefault(); 
 
    var $row = $tbody.find('tr').eq(0).clone(); 
 
    $row.find('input').val(''); 
 
    var $newRow = $($row[0].outerHTML); 
 
    $tbody.append($newRow); 
 
}); 
 
$tbody.on('keyup', '.calculate', function() { 
 
    var $tr = $(this).closest('tr'); 
 
    var end = $tr.find('.end_count').val(); 
 
    var ac = $tr.find('.actual_count').val(); 
 
    var total_variance = end - ac; 
 
    $tr.find('.variance').val(total_variance); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<a href="" value="" class="add_row_count" id="hide">Add another row</a> 
 
<table id='count' class="table table-bordered count" cellspacing="0" width="100%"> 
 
    <thead> 
 
    <tr> 
 
     <th style="text-align: center; width:180px"></th> 
 
     <th style="text-align: center;">BEG</th> 
 
     <th style="text-align: center;"> DEL</th> 
 
     <th style="text-align: center;"> RET</th> 
 
     <th style="text-align: center;"> EXC</th> 
 
     <th style="text-align: center;"> P-OUT</th> 
 
     <th style="text-align: center;"> SALES</th> 
 
     <th style="text-align: center;"> END</th> 
 
     <th style="text-align: center;"> ACTUAL COUNT</th> 
 
     <th style="text-align: center;"> VARIANCE</th> 
 
    </tr> 
 
    </thead> 
 
    <tbody> 
 
    <tr> 
 
     <td style="text-align: center;"> 
 
     <input type="text" name="categ_name[]" class="calculate categ_name" value="" placeholder="Item Category" required> 
 
     </td> 
 
     <td style="text-align: center;"> 
 
     <input type="number" name="beg_count[]" class="calculate beg_count" value="" placeholder="BEG Count" required> 
 
     </td> 
 
     <td style="text-align: center;"> 
 
     <input type="number" name="del_count[]" class="calculate del_count" value="" placeholder="DEL Count" required> 
 
     </td> 
 
     <td style="text-align: center;"> 
 
     <input type="number" name="ret_count[]" class="calculate ret_count" value="" placeholder="RET Count" required> 
 
     </td> 
 
     <td style="text-align: center;"> 
 
     <input type="number" name="exc_count[]" class="calculate exc_count" value="" placeholder="EXC Count" required> 
 
     </td> 
 
     <td style="text-align: center;"> 
 
     <input type="number" name="pout_count[]" class="calculate pout_count" value="" placeholder="P-Out Count" required> 
 
     </td> 
 
     <td style="text-align: center;"> 
 
     <input type="number" name="sales_count[]" class="calculate sales_count" value="" placeholder="SALES Count" required> 
 
     </td> 
 
     <td style="text-align: center;"> 
 
     <input type="number" name="end_count[]" class="calculate end_count" value="" placeholder="END Count" required> 
 
     </td> 
 
     <td style="text-align: center;"> 
 
     <input type="number" name="actual_count[]" class="calculate actual_count" value="" placeholder="Actual Count" required> 
 
     </td> 
 
     <td style="text-align: center;"> 
 
     <input type="number" name="variance[]" class="variance" value="" placeholder="Variance" readonly> 
 
     </td> 
 
    </tr> 
 
    </tbody> 
 
</table>

+1

Vielen Dank! Dies ist genau das, was ich gesucht habe! Blick in Event Delegation. Nochmals vielen Dank! – tyy007

+0

@ tyy007 Bitte beachten Sie, dass ich, anstatt HTML zu erstellen, das erste Element geklont habe, die Eingaben geleert und den HTML-Code verwendet habe, um die neue Zeile zu erstellen, IMHO, es ist viel einfacher zu arbeiten, besonders mit komplexem HTML :) – DelightedD0D

+0

Ich habe eine Frage obwohl, wie sollte ich einen löschen reihenlink als td hinzufügen, wenn der tr geklont wurde und die ursprüngliche reihe hat keine delete reihe link spalte? – tyy007

Verwandte Themen