Robię dynamiczny formularz z użyciem JQuery.
Kod wygląda tak:
Szablon HTML:
<textarea style="display:none" id="departments"> <tr id="departments_tr_{0}"> <td>{0} <select name="departments_{0}"> <option value="">[choose department]</option> <?php $depts = $db->getDepartments(); foreach ($depts as $depts_row) { } ?> </select> </td> <td> <a href="#" ><img id="deleteDepartmentLine_{0}" border="0" src="images/minus.png"></a> </td> </tr> </textarea>
Niedziałający kod JS:
<?php var templateDepartments = jQuery.format($("#departments").val()); var depts_id = 1; function addDepartment() { depts_id++; $(templateDepartments(depts_id)).appendTo("#approvalLine tbody"); $("#deleteDepartmentLine_" + depts_id).click(function(){ $("#departments_tr_" + depts_id).remove(); }); } $("#addDepartmentLine").click(addDepartment); ?>
Działający kod JS:
<?php var templateDepartments = jQuery.format($("#departments").val()); var depts_id = 1; function addDepartment() { var r = depts_id++; $(templateDepartments(r)).appendTo("#approvalLine tbody"); $("#deleteDepartmentLine_" + r).click(function(){ $("#departments_tr_" + r).remove(); }); } $("#addDepartmentLine").click(addDepartment); ?>
Różnica polega na tym, że przepisuję zmienną i do zdarzeń używam przepisanej.
Pisząc 'nie działa' mam na myśli to, że wartość depts_id nie jest doklejana do nazwy elementu w momencie deklaracji, tylko w momencie zdarzenia.
Czyli: klikając na dowolny guzik minus usunie się tylko ostatnio wstawiony wiersz.
Z góry dzięki za pomysły.