通过打开弹出窗口向表添加行

时间:2019-08-08 13:00:33

标签: javascript jquery

我有一个动态表。我可以添加或删除行。没问题但这就是我想要的。当我单击行插入图标时,将弹出一个弹出窗口,并显示两个选项。例如,选项a和b。当我按A时,我想按A来添加行,按B时按B。我该怎么做?

    <script type="text/javascript">
$(document).ready(function(){
    $('[data-toggle="tooltip"]').tooltip();
    var actions = $("table td:last-child").html();
    // Append table with add row form on add new button click
    $(".add-new").click(function(){
        $(this).attr("disabled", "disabled");
        var index = $("table tbody tr:last-child").index();
        var row = '<tr>' +
            '<td><input type="text" class="form-control" name="name" id="name"></td>' +
            '<td><input type="text" class="form-control" name="department" id="department"></td>' +
            '<td><input type="text" class="form-control" name="phone" id="phone"></td>' +
            '<td>' + actions + '</td>' +
        '</tr>';
        $("table").append(row);     
        $("table tbody tr").eq(index + 1).find(".add, .edit").toggle();
        $('[data-toggle="tooltip"]').tooltip();
    });
    // Add row on add button click
    $(document).on("click", ".add", function(){
        var empty = false;
        var input = $(this).parents("tr").find('input[type="text"]');
        input.each(function(){
            if(!$(this).val()){
                $(this).addClass("error");
                empty = true;
            } else{
                $(this).removeClass("error");
            }
        });
        $(this).parents("tr").find(".error").first().focus();
        if(!empty){
            input.each(function(){
                $(this).parent("td").html($(this).val());
            });         
            $(this).parents("tr").find(".add, .edit").toggle();
            $(".add-new").removeAttr("disabled");
        }       
    });

1 个答案:

答案 0 :(得分:0)

您应该创建两个“模板函数”,并根据需要使用它们。

const btAddA = document.getElementById('addA')
const btAddB = document.getElementById('addB')

btAddA.addEventListener('click', function(e) {
  addTableRow(this.getAttribute("data-template"))
})

btAddB.addEventListener('click', function(e) {
  addTableRow(this.getAttribute("data-template"))
})

// adding template based on data-template on the button
function addTableRow(templateId) {
  // creating the DOM element (node)
  const row = document.createElement('tr')
  // picking the right template to add and setting the
  // innerHTML of the node created
  row.innerHTML = templateId === 'a' ? templateA() : templateB()
  // appending to the DOM element (table)
  document.getElementById('table').appendChild(row)
}

function templateA() {
  return `<td>This is row template:</td><td>A</td>`
}

function templateB() {
  return `<td>This is row template:</td><td>B</td>`
}
<button id="addA" data-template="a">Add A</button>
<button id="addB" data-template="b">Add B</button>
<table id="table">
</table>