无法从 jQuery DataTables 中触发模式

Posted

技术标签:

【中文标题】无法从 jQuery DataTables 中触发模式【英文标题】:Unable to trigger modal from within jQuery DataTables 【发布时间】:2019-09-17 16:47:18 【问题描述】:

我在页面的结束正文标记之前有一个通用模式。我使用 javascript 在单击按钮时显示模式,将嵌入在按钮中的数据属性值传递给模式标题、正文和页脚。这使得模态动态。它很好用,但是,当我在 jQuery DataTable 中添加触发按钮时,它无法触发模态。

这是我的模态:

<div class="modal fade" id="modal_confirm_action" role="dialog">
    <div class="modal-dialog">
        <div class="modal-content">
            <div class="modal-header">
                <h5 class="modal-title"></h5>
                <div class="pull-right m-l-15">
                    <button class="btn btn-danger btn-sm modal_close_btn" data-dismiss="modal" class="close" title="Close"> &times;</button>
                </div>
            </div><!--/.modal-header-->
            <div class="modal-body">
                <!--render data via JS-->
            </div>
            <div class="modal-footer">
                <a class="btn btn-sm btn-danger" role="button" id="action_url"> Yes, Continue </a>
                <button data-dismiss="modal" class="btn btn-sm btn-secondary"> No, Cancel </button>
            </div>
        </div>
    </div>
</div>

这是触发它的按钮:

<a class="btn btn-sm btn-danger text-white modal_trigger_confirm_action" data-title="Delete Post" data-msg="Sure to delete?" data-url="'.base_url('posts/delete_post/'.$id).'">Delete</a>

注意:我正在使用带有 DataTables(和 CodeIgniter)的服务器端处理,所以上面的按钮在我的控制器方法中,并呈现在一列中,如下所示:

...
$row[] = '<a class="btn btn-sm btn-danger text-white modal_trigger_confirm_action" data-title="Delete Post" data-msg="Sure to delete?" data-url="'.base_url('posts/delete_post/'.$post_id).'">Delete</a>';
...

这是打开模式的 JavaScript:

$('.modal_trigger_confirm_action').click(function() 
    //get data value params
    var title = $(this).data('title'); 
    var msg = $(this).data('msg'); 
    var url = $(this).data('url');
    $('#modal_confirm_action .modal-title').text(title); //dynamic title
    $('#modal_confirm_action .modal-body').html(msg); //dynamic body content
    $('#modal_confirm_action .modal-footer #action_url').attr('href', url); //url to delete item
    $('#modal_confirm_action').modal('show'); //show the modal
);

单击每一行中的删除按钮不会执行任何操作。我做错了什么?

【问题讨论】:

【参考方案1】:

因为按钮是动态生成的,而不是第一次加载时 DOM 的一部分,所以您需要触发点击动态生成的按钮,就像这样。

$(document).on( "click",".modal_trigger_confirm_action", function()  //logic here );

【讨论】:

你是救生员@Ravi!我自己永远也想不通。它就像一个魅力!【参考方案2】:

请试试这个:

$( ".modal_trigger_confirm_action" ).on( "click", function() 
  // your logic here
);

【讨论】:

我真的不知道使用.click()和.on("click")有什么区别,但是我做了,还是不行。 .on("click") 用于在从脚本创建元素时将事件处理程序与元素连接起来。在这里你可以试试我想让你试试这个:$(document).on('click', '.modal_trigger_confirm_action', function() // here your code. ); 谢谢平图。这本来行得通,拉维的回答成功了。 我建议您只返回 json 数据而不是 html 并在前端解析它们。

以上是关于无法从 jQuery DataTables 中触发模式的主要内容,如果未能解决你的问题,请参考以下文章

jQuery Datatables - 无法从隐藏页面获取输入值

Javascript/jQuery/Datatables 对复选框触发的值求和

单击按钮时,如何触发 jquery datatables fnServerData 通过 AJAX 更新表?

DataTables 警告:table id=example - 无法重新初始化 DataTable - jQuery

由 Datatables 插件和 jQuery 1.11.3 触发的“Uncaught TypeError: Cannot use 'in' operator to search 'length' i

Jquery Datatables 事件处理程序不适用于分页