簡體   English   中英

我需要動態地向表單添加更多字段,並且新字段輸入值也會更改

[英]I need to dynamically add more fields to a form and have the new fields inputs values change as well

我在這里有一個jsfiddle我正在使用的腳本動態地向行添加行但是有問題。

在我的表單上,我有第一行,我想用腳本復制。 該行包含6個名為job_date1tech_name1cost_code1pay_rate1total_hours1sub_total1

當通過腳本創建第二行時,我現在需要新的行輸入名稱由腳本設置,如果可能的話,可以使用job_date2tech_name2cost_code2等等,並且每創建一個新行,我需要結束數字向上移動一行。

這是代碼:

function addRow(tableID) {
        var table = document.getElementById(tableID);
        var rowCount = table.rows.length;
        var row = table.insertRow(rowCount); 
        var colCount = table.rows[0].cells.length;

        for(var i=0; i<colCount; i++) { 
            var newcell = row.insertCell(i);
            newcell.innerHTML = table.rows[0].cells[i].innerHTML;

            switch(newcell.childNodes[0].type) {
                case "text":
                        newcell.childNodes[0].value = "";
                        break;
                case "checkbox":
                        newcell.childNodes[0].checked = false;
                        break;
                case "select-one":
                        newcell.childNodes[0].selectedIndex = 0;
                        break;
            }
        }
}

function deleteRow(tableID) {
        try {
        var table = document.getElementById(tableID);
        var rowCount = table.rows.length;

        for(var i=0; i<rowCount; i++) {
            var row = table.rows[i];
            var chkbox = row.cells[0].childNodes[0];
            if(null !== chkbox && true === chkbox.checked) {
                if(rowCount <= 1) {
                    alert("Cannot delete all the rows.");
                    break;
                }
                table.deleteRow(i);
                rowCount--;
                i--;
            } 
        }
        } 
        catch(e) {
            alert(e);
        }
}

這是一個簡單的解決方案:

newcell.children[0].name = newcell.children[0].name + rowCount;

在計算每個新添加的行時,將該變量添加到每個輸入元素。

這是jsFiddle (確保在運行該函數時檢查控制台以查看控制台日志)。

對於第一個日志,它返回:

chk1
txt1 
tech_name1 
cost_code1
txt1 

對於創建的第二個元素

chk2
txt2 
tech_name2 
cost_code2
txt2 

等等

我有一個更簡單的建議。 而不是使用job_date1job_date2等,將字段job_date[] (所有作業日期字段)。

例如,PHP會自動識別這一點,而$_POST["job_date"]將是一個數組,其中包含作業日期的所有值,按照它們在html頁面上顯示的順序。
所以而不是$_POST["job_date" . $i] $_POST["job_date" . $i]你會使用$_POST["job_date"][$i]

我不知道你使用什么技術作為后端,但我相信你可以達到同樣的效果。

它將更加強大和優雅,您在添加或刪除行時不必關心重新編號。


可以發現有關此技術在PHP中的更多細節:編輯 PHP常見問題和示例3 這里

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM