Javascript 数据表获取';未定义';从json对象

Javascript 数据表获取';未定义';从json对象,javascript,json,datatables,Javascript,Json,Datatables,我需要从按钮函数中的json对象获取id。如果我尝试直接访问id,我会得到未定义的(不是错误/警告),但是如果我尝试访问对象,我可以毫无问题地看到它(id和其他数据) 我可以通过以下方式访问json对象: alert( JSON.stringify(dt.row( { selected: true } ).data()) ); // {"id":1,"key":"value","etc":"etc"} 这很有效,我可以在警报中看到物体 alert( dt.row( { selected: tr

我需要从按钮函数中的json对象获取id。如果我尝试直接访问id,我会得到
未定义的
(不是错误/警告),但是如果我尝试访问对象,我可以毫无问题地看到它(id和其他数据)

我可以通过以下方式访问json对象:

alert( JSON.stringify(dt.row( { selected: true } ).data()) );
// {"id":1,"key":"value","etc":"etc"}
这很有效,我可以在警报中看到物体

alert( dt.row( { selected: true } ).id() );  // undefined
alert( JSON.stringify(dt.row( { selected: true } ).id()) );  // "undefined"
alert( JSON.stringify(dt.row( { selected: true } ).data()[0]) );  // undefined
这不起作用,我可以看到
未定义
,而不是警报中的整数

alert( dt.row( { selected: true } ).id() );  // undefined
alert( JSON.stringify(dt.row( { selected: true } ).id()) );  // "undefined"
alert( JSON.stringify(dt.row( { selected: true } ).data()[0]) );  // undefined
我尝试了很多我甚至记不起来的东西,但没有一个是有效的


我做错了什么?

您可以像这样使用render属性

        "render": function (data, type, full, meta) {

             var varName = full.varName;
             return '<div>'+ varName +'</div>' //or whatever html you want to render    
    }
“呈现”:函数(数据、类型、完整、元){
var varName=full.varName;
返回“”+varName+“”//或任何要呈现的html
}

我想这就是你想要做的。看看我的“修改”按钮,就是我在你的按钮后面添加的按钮。我正在使用extn,但是如果您的数据有一个id字段,您应该能够更改名称以匹配。进行了一些其他更改,以便在我的本地环境中运行,但如果您在JSFIDLE中设置或在本地使用,它应该可以工作

注意:这假设一次只能选择一行

    <!DOCTYPE html>

    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title></title>
        <link href="https://cdn.datatables.net/1.10.10/css/jquery.dataTables.min.css " rel="stylesheet" type="text/css" />
        <link href="https://cdn.datatables.net/buttons/1.1.0/css/buttons.dataTables.min.css" rel="stylesheet" type="text/css" />

          <link href="https://cdn.datatables.net/select/1.1.0/css/select.dataTables.min.css" rel="stylesheet" type="text/css" />
        <script src="//code.jquery.com/jquery-1.11.3.min.js" type="text/javascript"></script>
        <script src="https://cdn.datatables.net/1.10.10/js/jquery.dataTables.min.js" type="text/javascript"></script>
        <script src="https://cdn.datatables.net/buttons/1.1.0/js/dataTables.buttons.min.js" type="text/javascript"></script>
        <script src="https://cdn.datatables.net/select/1.1.0/js/dataTables.select.min.js" type="text/javascript"></script>
        <script type="text/javascript">

            var mydata =  [
                  {
                      "name": "Tiger Nixon",
                      "position": "System Architect",
                      "salary": "$320,800",
                      "start_date": "2011/04/25",
                      "office": "Edinburgh",
                      "extn": "5421"
                  },
                   {
                       "name": "Garrett Winters",
                       "position": "Accountant",
                       "salary": "$170,750",
                       "start_date": "2011/07/25",
                       "office": "Tokyo",
                       "extn": "8422"

                   }];



            $(document).ready(function() {

                $.map(mydata, function (item, key) {
                           item["DT_RowId"] = item["extn"]});

               var table = $('#example').DataTable( {
                   serverSide: false,
                   dom: 'Bfrtip',
                   data:mydata,
                   columns: [

               { "data": "name" },
               { "data": "position" },
               { "data": "office" },
               { "data": "extn" },
               { "data": "start_date" },
               { "data": "salary" }
                       // more columns
                   ],

                   buttons: [
                       {
                           text: 'New',
                           action: function ( e, dt, node, config ) {
                               window.location.href = '/url?op=new'
                           }
                       },
                       {
                           text: 'Modify',
                           action: function (e, dt, node, config) {

                               window.location.href = '/url?op=modify&id=' + dt.row( { selected: true } ).id() ;
                           },
                           enabled: true
                       },
                       {
                           text: 'Delete',
                           action: function ( e, dt, node, config ) {
                           },
                           enabled: false
                       },
                       {
                            extend: 'selected',
                           text: 'Modify',
                           action: function ( e, dt, button, config ) {
                            var rw = dt.rows({ selected: true }).data()[0];
                            window.location.href = '/url?op=modify&id=' + rw.extn;
                        }

                }

                   ],
                   select: true
               } );
            } );

        </script>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>

            <table width="100%" class="display" id="example" cellspacing="0">
                    <thead>
                        <tr>
                            <th>Name</th>
                            <th>Position</th>
                            <th>Office</th>
                            <th>Extn.</th>
                            <th>Start date</th>
                            <th>Salary</th>
                        </tr>
                    </thead>
                    <tfoot>
                        <tr>
                            <th>Name</th>
                            <th>Position</th>
                            <th>Office</th>
                            <th>Extn.</th>
                            <th>Start date</th>
                            <th>Salary</th>
                        </tr>

                    </tfoot>
                </table>
        </div>
        </form>
    </body>
    </html>

var mydata=[
{
“名字”:“老虎尼克松”,
“职位”:“系统架构师”,
“工资”:“$320800”,
“开始日期”:“2011/04/25”,
“办公室”:“爱丁堡”,
“extn”:“5421”
},
{
“姓名”:“Garrett Winters”,
“职位”:“会计”,
“工资”:“$170750”,
“开始日期”:“2011/07/25”,
“办公室”:“东京”,
“extn”:“8422”
}];
$(文档).ready(函数(){
$.map(mydata,函数(项,键){
项目[“DT_RowId”]=项目[“extn”]};
变量表=$(“#示例”)。数据表({
服务器端:错,
dom:'Bfrtip',
数据:mydata,
栏目:[
{“数据”:“名称”},
{“数据”:“位置”},
{“数据”:“办公室”},
{“数据”:“extn”},
{“数据”:“开始日期”},
{“数据”:“工资”}
//更多栏目
],
按钮:[
{
文本:'新',
动作:函数(e、dt、节点、配置){
window.location.href='/url?op=new'
}
},
{
文本:“修改”,
动作:函数(e、dt、节点、配置){
window.location.href='/url?op=modify&id='+dt.row({selected:true}).id();
},
已启用:true
},
{
文本:“删除”,
动作:函数(e、dt、节点、配置){
},
已启用:false
},
{
扩展:“已选定”,
文本:“修改”,
动作:功能(e、dt、按钮、配置){
var rw=dt.rows({selected:true}).data()[0];
window.location.href='/url?op=modify&id='+rw.extn;
}
}
],
选择:true
} );
} );
名称
位置
办公室
Extn。
开始日期
薪水
名称
位置
办公室
Extn。
开始日期
薪水

我不明白您是如何选择行的。我还没有找到一个使用{selected:true}的示例。我没有这样做,有人给了我这个代码作为示例。你知道如何从所选行获取id值吗?我不小心把帖子放到了你的另一个问题上。一旦你像我在另一篇帖子中那样设置了DT_RowId,你就可以像在这里尝试的那样使用.id()函数获取行id。不,我需要从所选行获取id值。谢谢!我使用的是
var rw=dt.rows({selected:true}).data()[0]
警报(rw.id)
结果表明,
{selected:true}
实际上正在工作!