Bootstrap 动态创建的元素无法打开引导模式

ruoxqz4g  于 2023-06-04  发布在  Bootstrap
关注(0)|答案(1)|浏览(173)

我有一个MVC视图,它有一个表,在他的一个单元格中,它包含一个锚标记,该标记打开一个Bootstrap模式,如下所示:

<td><a href="#" class="button-action btnUpdateModal" name="btnUpdateModal">Edit</a></td>

使用这个JS:

var updateModal = $("#updateHolidayModal");
   $(".btnUpdateModal").click(function () {
        let hId = $(this).closest('tr').attr('id').split('-')[1];
        let hName = "";
        let hDate = "";
        let hWai;
        let hEH;
        let hG;
        var $row = jQuery(this).closest('tr');
        var $columns = $row.find('td');
        jQuery.each($columns, function (i, item) {
            if (i == 0) {
                hName = item.innerHTML;
            } else if (i == 1) {
                hDate = item.innerHTML;
            } else if (i == 2) {
                hWai = $(this).attr("class") == "true" ? true : false;
            } else if (i == 3) {
                hEH = item.innerHTML == "@Resource.Yes" ? true : false;
            } else if (i == 4) {
                hG = item.innerHTML == "@Resource.Yes" ? true : false;
            }

        });

        $("#hNameUpdate").val(hName);
        $("#hDateUpdate").val(hDate);
        $("#hEHUpdate").prop('checked', hEH);
        $("#hWaiUpdate").prop('checked', hWai);
        
        $(".hdnHId").val(hId);
        updateModal.modal('show');
    });

当控制器呈现这个视图时,模态工作得很顺利,但是我必须为这个表做一个过滤器,为此我使用了 AJAX 。我已经设法删除了这些行,并使用控制器中另一个操作返回的JSON创建了新的行,但是我无法使用anchors标记(Edit和Delete)

$("#btnFiltrarPorFecha").click(function () {

        let startDate = $('#datefilterh').data("daterangepicker").startDate.format('DD/MM/YYYY');
        let endDate = $('#datefilterh').data("daterangepicker").endDate.format('DD/MM/YYYY');

        $.ajax({
            type: "GET",
            url: '@Url.Action("GetHJson", "Hol")',
            data: { 'startDate': startDate, 'endDate': endDate },
            success: function (response) {
                $("#principalTable tbody").remove();
                let editAction = '<td><a href="#" class="button-action btnUpdateModal"  name="btnUpdateModal">Edit</a></td>';
                let deleteAction = '<td><a class="button-action btnDeleteModal" name="btnDeleteModal">Delete</a></td>';
                let date = "";
                let waiElement = "";                
                let tEHElement = "";
                let t = "<tbody>";
                $.each(response, function (i, v) {
                    date = moment(v.inicioF).format("DD/MM/YYYY");
                    if (v.ren == true) {
                        waiElement = '<td class="true"><span class="wai-true">Yes</span></td>';
                    } else {
                        waiElement = '<td class="false"><span class="wai-false">No</span></td>';
                    }
                    if (v.tEH) {
                        tEHElement = '<td>Yes</td>';
                    } else {
                        tEHElement = '<td>No</td>';
                    }
                    t += '<tr style="text-align:center;" id="' + v.idF + '"><td>' + v.descripcionF + '</td><td>' + date + '</td>' + waiElement + tEHElement + editAction + deleteAction + '</tr> ';
                });
                t += "</tbody>";
                $("#principalTable").append(t);
            },
            error: function () {
            }
        });
    })

渲染是好的,检查器中的元素似乎是正确的,但当我点击锚标签时,它没有打开模态。
为什么模式不打开?

ghhaqwfi

ghhaqwfi1#

根据詹姆斯的评论,我这样解决了这个问题。

$("#principalTable").on('click', '.btnUpdateModal', function() { 
    // do something here
});

其中:

  • #principalTable:是我的表的ID。这不是动态创建的,而是在加载视图时创建的。
  • click:是我等待发生的事件
  • btnUpdateModal:是我动态添加到要执行单击事件的元素中的类。

相关问题