Ich muss eine "Neue Zeile hinzufügen" -Funktion in einem Formular zu implementieren. Die Struktur der Form ist so etwas wie:Klonen Sie eine <tr> und auch das Attribut name der Elemente innerhalb von 1
<table>
<tr>
<td><input type="text" name="v1[label]" /></td>
<td><input type="text" name="v1[observation]" /></td>
<td><input type="text" name="v1[remarks]" /></td>
</tr>
<tr>
<td><input type="text" name="v2[label]" /></td>
<td><input type="text" name="v2[observation]" /></td>
<td><input type="text" name="v2[remarks]" /></td>
</tr>
<tr>
<td colspan="3">
<input type="button" id="addrow" value="Add One More Row">
<input type="submit" name="proceed" value="Submit" />
</td>
</tr>
</table>
Wie zu sehen ist, wobei jede Reihe, gibt es eine Zunahme in v[]
Nummer. v1, v2..and so weiter
WAS ICH SUCHE NACH
Wenn 'Add One More Row' Schaltfläche geklickt wird, sollten folgende Dinge passieren
- Eine neue Zeile wird eingefügt über der letzten Zeile (die Zeile mit Buttons)
- Der Name Attributwert erhöht sich um 1 (dh v2 [Label] wird v3 [Label], v2 [Beobachtung] wird v3 [Beobachtung] und so weiter) in dass Zeile
WAS habe ich versucht,
Der nächstgelegene ich kam war jQuery's
clone()
verwenden. Dies fügt die Zeile perfekt hinzu. Aber ich finde es schwierig, einen Weg zu finden, den Wert des name-Attributs bei jedem Klick auf die Schaltfläche um 1 zu erhöhen.
JQuery WERDEN DERZEIT USED
$('input:button[id="addrow"]').click(function(){
var secondlast = $('table tr:last').prev('tr');
secondlast.clone().insertBefore(secondlast);
});
Wenn ich die Taste zweimal auf, ich bin die folgende HTML immer
hinzugefügt<tr>
<td><input type="text" name="v2[label]" /></td>
<td><input type="text" name="v2[observation]" /></td>
<td><input type="text" name="v2[remarks]" /></td>
</tr>
<tr>
<td><input type="text" name="v2[label]" /></td>
<td><input type="text" name="v2[observation]" /></td>
<td><input type="text" name="v2[remarks]" /></td>
</tr>
So eine Zeile hinzugefügt wird, aber der Name Das Attribut bleibt bei v2, während es für die dritte und vierte Zeile v3 und v4 sein sollte. Ich verstehe, clone()
kann das nicht tun, und deshalb suche ich nach einer Alternative.
Haben Sie versucht, den Klon Verarbeitung vor dem Einsetzen? Mit etwas wie zum Beispiel, secondlast.clone(). Jeder ('input') ', den Namen analysieren und die Nummer ersetzen? – Eregrith
Hmm ..Das macht Sinn. Ich werde versuchen und sehen, ob ich das erreichen kann – asprin
@Eregrith Ich bin kristallklar mit der Logik, aber es schwer zu finden, das in Programmier-Syntax zu konvertieren :( – asprin