将单击功能添加到 Jquery DataTable 中的两个按钮

Posted

技术标签:

【中文标题】将单击功能添加到 Jquery DataTable 中的两个按钮【英文标题】:Add Click Function To Two Buttons Inside Jquery DataTable 【发布时间】:2018-01-30 16:07:36 【问题描述】:

我有一个带有动态添加的编辑和删除按钮的 jquery 数据表,如下所示:

下面是我的 JS:

 ajaxLoadSuccess: function (data) 
     var datatableVariable = $('#articleTable').DataTable( 
         data: data,
         columns: [
              'data': 'Topic' ,
              'data': 'SubTopic' ,
              'data': 'Title' ,
             // 'data': 'ParsedText' ,
             
                 'data': 'AddedOn', 'render': function (date) 
                      var date = new Date(parseInt(date.substr(6)));
                      var month = date.getMonth() + 1;
                      return date.getDate() + "/" + month + "/" + date.getFullYear();
                 
             ,
              'data': 'AddedBy' ,
             
                'data': 'Action', 'render': function (data, type, row, meta) 
                 return '<input id="btnEdit" type="button" value="Edit" class="sfBtn sfPrimaryBtn sfLocale" /> <input id="btnDelete" type="button" value="Delete" class="sfBtn sfPrimaryBtn sfLocale" />';
                 
             ]
        );

下面是我的按钮点击代码:

$("#articleTable tbody").on("click", "tr", function () 
    alert($(this).text());
);

当我单击编辑或删除按钮时,上面的函数被触发,我想要为删除按钮添加另一个函数,以便在单击编辑和删除时触发单独的函数。我怎样才能做到这一点?

【问题讨论】:

【参考方案1】:

在这段代码中,您触发了 tr 的点击事件。而不是触发事件到 tr 你可以触发点击事件到特定的 id。这里有#btnEdit#btnDelete

所以你的代码看起来像

$(document).on('click', '#btnEdit', function () 
    // Do something on edit
);

$(document).on('click', '#btnDelete', function () 
    // Do something on delete
);

【讨论】:

这将始终触发点击第一行,因为按 id 选择将针对 DOM 中具有该 id 的第一个元素。 拥有按钮类而不是 ID 由于编辑和删除按钮对每一行都重复,因此不能为每个按钮设置不同的 ID。使用类将是理想的,并且还可以实现所需的功能。【参考方案2】:

我想你想要这样

$("#articleTable tbody tr").on("click", "input", function () 
    if ($(this).attr('id') == "btnEdit") 
        fn_edit();
    
    else 
        fn_delete();
    
);

【讨论】:

【参考方案3】:

如果是这种情况,您似乎想在单击该行的按钮时对该特定行执行操作,那么我的建议是通过为该按钮提供类来访问该按钮,因为您使用的方法将生成多个具有相同 id 的按钮和 html 表单不能有具有相同 id 的元素。

ajaxLoadSuccess: function (data) 
 var datatableVariable = $('#articleTable').DataTable( 
     data: data,
     columns: [
          'data': 'Topic' ,
          'data': 'SubTopic' ,
          'data': 'Title' ,
         // 'data': 'ParsedText' ,
         
             'data': 'AddedOn', 'render': function (date) 
                  var date = new Date(parseInt(date.substr(6)));
                  var month = date.getMonth() + 1;
                  return date.getDate() + "/" + month + "/" + date.getFullYear();
             
         ,
          'data': 'AddedBy' ,
         
            'data': 'Action', 'render': function (data, type, row, meta) 
             return '<input type="button" value="Edit" class="btnEdit sfBtn sfPrimaryBtn sfLocale" /> <input type="button" value="Delete" class="btnDelete sfBtn sfPrimaryBtn sfLocale" />';
             
         ]
    );

现在您可以使用以下代码访问该按钮:

$("#articleTable tbody").on("click", ".btnEdit", function () 
                alert($(this).text());
            );

$("#articleTable tbody").on("click", ".btnDelete", function () 
                alert($(this).text());
            );

【讨论】:

以上是关于将单击功能添加到 Jquery DataTable 中的两个按钮的主要内容,如果未能解决你的问题,请参考以下文章

将带有 URL 变量的超链接添加到数据表(jQuery)+ 搜索不起作用

dataTables jquery - 如何添加排序图像/图标?

将单击与 JQuery 中的可拖动功能分开

通过单击 JQuery DataTable 打开引导模式

MVC 问题在按钮单击时从 JSon 对象填充 JQuery DataTable

在闪亮应用程序的 DT::datatable 中添加、删除和编辑行