右键单击上下文菜单,从(动态)数据表中的行中检索特定单元格值

时间:2015-07-09 13:41:41

标签: jquery ajax dynamic datatable

我正在使用Ajax源数据https://www.datatables.net/examples/data_sources/ajax.html来显示我的内容..

在上面我使用了上下文菜单http://medialize.github.io/jQuery-contextMenu/demo.html。但我已经定制了它,因为我希望它是动态的。

我希望根据数据表中ActivityStatus列(第6列)中的值来填充contextmenu项。为此,我必须检索该列值。

请在触发上下文菜单时帮助我检索值。

    var contxtM={
                "contextMain": [
                    {
                        "actstatus": "Draft",
                        "contextmenu": "edit,delete,submit"
                    },
                    {
                        "actstatus": "Completed",
                        "contextmenu": "delete"
                    },
                    {
                        "actstatus": "Awaiting",
                        "contextmenu": "edit,delete,modify"
                    }
                ]
            };

        $('#datatb tbody').contextMenu({
            selector: 'tr', 
            build: function($trigger, e) {
                var dynamicContextMenu; 
                //I want this actSt to be retrived from datatable here
                var actSt = "Draft";
                var menustr;
                for(var i=0;i<contxtM.contextMain.length;i++){
                    if(actSt==contxtM.contextMain[i].actstatus){
                         menustr =contxtM.contextMain[i].contextmenu;
                    }
                }
                    /* alert(menustr); */
                var menu= menustr.split(","); 
                var arrayitems= new Array();                
                $.each( menu, function( i, val ) {
                        arrayitems.push("'"+val+"': {name: '"+val+" Activity'}");
                });
                dynamicContextMenu="{"+arrayitems.join()+"}";
                var json = JSON.stringify(eval("(" + dynamicContextMenu + ")"));
                var dynamicContextMenu = jQuery.parseJSON(json);
                return {
                    callback: function(key, options) {
                        alert(key+"  "+$(this).text());
                    },  
                    items: dynamicContextMenu
                };
                }
        });

我尝试使用以下代码进行检索。但它在代码的上下文部分不起作用。

    $('#datatb tbody tr',this).eq(6).text()

但是当我在简单的点击上使用它时它确实有效。

    $('#datatb tbody').on('click', 'tr', function () { 
            alert($('td',this).eq(6).text());
    });

请在触发上下文菜单时帮助我检索值。

1 个答案:

答案 0 :(得分:1)

首先&#34; eq()以0&#34;开头

所以你需要传递n-1来访问第n个元素。

使用以下jquery脚本获取第6列文本:

var currentTr = e.currentTarget;                
var actSt = $(currentTr).find('td:eq(5)').text();

您的代码将如下所示:

 var contxtM={
            "contextMain": [
                {
                    "actstatus": "Draft",
                    "contextmenu": "edit,delete,submit"
                },
                {
                    "actstatus": "Completed",
                    "contextmenu": "delete"
                },
                {
                    "actstatus": "Awaiting",
                    "contextmenu": "edit,delete,modify"
                }
            ]
        };

    $('#datatb tbody').contextMenu({
        selector: 'tr', 
        build: function($trigger, e) {
            var dynamicContextMenu; 
            //I want this actSt to be retrived from datatable here

            var currentTr = e.currentTarget;                
            var actSt = $(currentTr).find('td:eq(5)').text();
            //var actSt = "Draft";
            var menustr;
            for(var i=0;i<contxtM.contextMain.length;i++){
                if(actSt==contxtM.contextMain[i].actstatus){
                     menustr =contxtM.contextMain[i].contextmenu;
                }
            }
                /* alert(menustr); */
            var menu= menustr.split(","); 
            var arrayitems= new Array();                
            $.each( menu, function( i, val ) {
                    arrayitems.push("'"+val+"': {name: '"+val+" Activity'}");
            });
            dynamicContextMenu="{"+arrayitems.join()+"}";
            var json = JSON.stringify(eval("(" + dynamicContextMenu + ")"));
            var dynamicContextMenu = jQuery.parseJSON(json);
            return {
                callback: function(key, options) {
                    alert(key+"  "+$(this).text());
                },  
                items: dynamicContextMenu
            };
            }
    });