【问题标题】:how to show edit and delete buttons on datatables when right click to rows?右键单击行时如何在数据表上显示编辑和删除按钮?
【发布时间】:2017-04-01 19:43:32
【问题描述】:

我可能会在这个问题上投反对票,但是。就这样吧。

我正在使用datatables。是否可以像示例here 一样在右键单击时显示有效的编辑和删除按钮?我不擅长jquery。如果有人可以发送样品,我将不胜感激。我发现的唯一工作示例是this。但这不是我想要达到的目标。

点击事件示例:https://datatables.net/examples/advanced_init/events_live.html

【问题讨论】:

  • 有效的编辑和删除按钮?
  • 那为什么不用第一个例子呢?
  • 正如我所说,我不知道 jquery,也不知道如何将 jQuery-contextMenu 与数据表集成。目前我有复选框,它们都有不同的 id,我必须单击复选框来删除或编辑一行。但我想使用这个功能。至少如果你能告诉我如何在点击任何行时获取 id,我将不胜感激
  • 这似乎正是您想要的,您只需要添加一些图标、一些其他文本并将它们链接到您想要执行的操作。
  • 感谢大卫的回复。我将如何在右键单击时分配 ID?

标签: jquery ajax datatables contextmenu right-click


【解决方案1】:

这是对第一个示例中使用的 javascript 的修改:

$(document).ready( function () {
  var oTable = $('#example').dataTable({
    "bJQueryUI": true,
    "sDom": 'l<"H"Rf>t<"F"ip>'
  });
  $(document).contextmenu({
    delegate: ".dataTable td",
    menu: [
      {title: "Delete", cmd: "delete"},
      {title: "Edit", cmd: "edit"}
    ],
    select: function(event, ui) {
        switch(ui.cmd){
            case "delete":
                $(ui.target).parent().remove();
                break;
            case "edit":
              $(ui.target).html(
                $('<input type="text"/>').val(
                  $(ui.target).text()
                ).bind( "keypress focusout",function (e) {
                  if (e.type=="keypress"?(e.keyCode ==13?true:false):true) {
                      $(this).parent().html(
                        $(this).val()
                      );
                    }
                  })
              );
                break;
        }
    },
    beforeOpen: function(event, ui) {
        var $menu = ui.menu,
            $target = ui.target
        ui.menu.zIndex(0);
    }
  });
} );

工作示例已在此处发布:

http://live.datatables.net/munonapo/1/embed

【讨论】:

  • 谢谢你。如何在点击时检索 id,我的 php 在删除/编辑请求中发送正确的 id。在这里,我将您的代码插入了我为 David 准备的 jsfiddle 中。 jsfiddle.net/0f9Ljfjr/899 右键似乎不起作用。
  • 那是因为它使用了 Jquery ui 和 dataTable 脚本。你必须嵌入它们。
  • 我根据你的创建了一个新的 jsbin,你可以看看,但似乎仍然没有工作。 output.jsbin.com/secunohivo
【解决方案2】:

您可以在drawCallback 处理程序中初始化上下文菜单,并在$.contextMenu 自己的回调中从单击的行中检索id

drawCallback : function() {
  $.contextMenu({
        selector: 'tbody tr td', 
        callback: function(key, options) {
            var id = options.$trigger[0].parentElement.id;
            var m = "clicked: " + key + ' ' + id;
            window.console && console.log(m) || alert(m); 
            /*
             switch (key) {
               case 'delete' :
                 yourDeleteMethod(id); break;
               case 'edit' :
                 yourEditMethod(id); break;
               ...
              }
            */ 
        },
        items: {
            "edit": {name: "Edit", icon: "edit"},
            "cut": {name: "Cut", icon: "cut"},
           copy: {name: "Copy", icon: "copy"},
            "paste": {name: "Paste", icon: "paste"},
            "delete": {name: "Delete", icon: "delete"},
            "sep1": "---------",
            "quit": {name: "Quit", icon: function(){
                return 'context-menu-icon context-menu-icon-quit';
            }}
        }
    });
},

更新小提琴 -> http://jsfiddle.net/0f9Ljfjr/900/

由于选择器设置为tbody tr tdid 将始终可以通过options.$trigger[0].parentElement.id 找到。现在您只需要响应您需要的任何操作,并使用检索到的id 调用您自己的方法。

【讨论】:

  • 哇哇哇!太棒了。非常感谢你。我很感激。我将尝试在我的 php 文件上实现这一点,我会告诉你结果。干杯。
  • 效果很好,谢谢。现在正在处理回调。var getid = options.$trigger[0].parentElement.id; alert(getid); 正在打印行 ID。再次感谢。
猜你喜欢
  • 2015-01-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-23
  • 2011-09-13
  • 1970-01-01
相关资源
最近更新 更多