Ich habe funktionierendes Skript, dass der Benutzer Eingaben in einem Formular abgeschlossen und wenn sie das Formular und den Inhalt des Formulars senden Eingaben als eine Tabellenzeile eingegeben werden.Erstellen Sie Zeile ID für dynamische JS-Tabelle
Gibt es einen Weg, denke ich innerhalb der JS zu jeder Zeile haben eine eindeutige ID und fügen Sie eine Schaltfläche zum Löschen der letzten Spalte jeder Zeile, so dass der Benutzer eine einzelne Zeile löschen kann.
Danke für die Rettung eines Lebens !!!!
HTML-Formular
<form id="my_form" action="table_form.php" method="post">
<div style="width:10%; float:left;">
Quantity<br />
<input name="field_1" type="text" id="field_1" size="3" />
</div>
<div style="width:20%; float:left;">
Part Number<br />
<input type="text" id="field_2" name="field_2" />
</div>
<div style="width:30%; float:left;">
Notes<br />
<input name="field_3" type="text" id="field_3" size="45" />
</div>
<div style="width:20%; float:left;">
Unit Price<br />
<input type="text" id="field_4" name="field_4" />
</div>
<div style="width:20%; float:left;">
<br />
<input type="submit" value="Add Row" />
</div>
</form>
<!--
Here we create our HTML table.
Note the ID of the table. This will be used in our javascript file
Our table only contains a header row. All other content will be added dynamically
--><? $rowid = 1; ?>
<table width="100%" id="my_table">
<tbody id="my_table_body">
<tr>
<th width="5%"><div align="left">Qty</div></th>
<th width="19%"><div align="left">Part Number</div></th>
<th width="46%"><div align="left">Notes</div></th>
<th width="15%"><div align="left">Unit Price</div></th>
<th width="15%"><div align="left">Row Total</div></th>
</tr>
</tbody>
</table>
JS
window.addEvent('domready', function(){
$('my_form').addEvent('submit', function(e){
e.stop();
this.set('send', {
onComplete: function(response){
var data = JSON.decode(response);
inject_row($('my_table_body'), data);
}
});
var valid_form = true;
$$('#my_form input').each(function(item){
if(item.value == '') valid_form = false;
});
if(valid_form) {
this.send();
} else {
alert('Fill in all fields');
}
});
var inject_row = function(table_body, data){
var row_str = '<tr width="100%">';
data.each(function(item, index){
row_str += '<td>'+item+'</td>';
});
row_str += '<td><input type="submit" name="deleterow" id="deleterow" value="Delete" /></td></tr>';
var newRow = htmlToElements(row_str);
newRow.inject(table_body);
}
var htmlToElements = function(str){
return new Element('div', {html: '<table><tbody>' + str + '</tbody></table>'}).getElement('tr');
}
});
PHP
<?php
/**
* If nothing is being posted to this script redirect to
* our HTML page.
*/
if(! $_POST){
header('Location: newquote.php');
}
// create an empty array for our results
$results = array();
/**
* Stick the values from _POST into our results array
* while also stripping out any html tags
*
* This is where you would perform any required processing
* of the form data such as server side validation or updating
* a database.
*/
foreach($_POST as $field){
$results[] = strip_tags($field);
}
// Echo our results as a JSON encoded string.
echo json_encode($results);
?>
„fügen Sie eine Löschtaste zur letzten colum jeder Zeile so dass der Benutzer eine einzelne Zeile löschen“ - Bewahren Sie die Datenserver-Seite ? Wo findet dieser Löschvorgang statt? Serverseitig? Client-Seite? Beide? – VolkerK
Nö nichts ist SS gespeichert - und die Operation würde CS stattfinden.Das Hinzufügen einer Löschschaltfläche ist ziemlich einfach und gibt der Zeile eine eindeutige ID, so dass der Benutzer nur die entsprechende Zeile löschen kann, wenn die Löschschaltfläche gedrückt wird. Danke fürs schauen. –
Bifter, Sie brauchen keine IDs. Wenn eine Taste gedrückt wird, gehe einfach das DOM zum nächsten TR-Element und "lösche" es ... – James