JQuery DataTable:一旦我打开/点击另一行,关闭一个打开的行

JQuery DataTable:一旦我打开/点击另一行,关闭一个打开的行

问题描述:

我正在处理Jquery DataTables传统项目。我正在尝试添加一项功能。如果我点击一行来显示它的细节,我可以通过打开另一行来自动关闭同一行。 现在的逻辑是我可以一次打开多行,但必须点击同一行来关闭它。JQuery DataTable:一旦我打开/点击另一行,关闭一个打开的行

... 
    eventsTableOpenDetails[0] = openBtn; //html image 
     eventsTableOpenDetails[1] = nTr;  // current inner tr 
    ..... 

     if(eventsTable.fnIsOpen(nTr)){ 
      openBtn.src = "images/details_open.png"; 
      eventsTable.fnClose(nTr); 
     } 
     else { 
      var aData = eventsTable.fnGetData(nTr); 
      var sOut = '<table cellpadding="5" cellspacing="0" border="0" style="padding-left:50px; border: 1px solid black; width: 100%; word-wrap:break-word;table-layout: fixed;">'; 
      sOut += '<tr><td style="width:10%">Cnt:</td><td>' + aData[1] + '</td></tr>'; 
      sOut += '<tr><td style="width:10%">Time:</td><td>' + aData[2] + '</td></tr>'; 
      sOut += '<tr><td style="width:10%">Type:</td><td>' + aData[3] + '</td></tr>'; 
      //sOut += '<tr><td style="width:10%">Field 5:</td><td>' + aData[5] + '</td></tr>'; 
      sOut += '<tr><td style="width:10%">Details:</td><td><pre>' + aData[6] + '</pre></td></tr>'; 
      sOut += '<tr><td style="width:10%"></td><td></td></tr>'; 
      sOut += '<tr><td style="width:10%"></td><td><button id="btnClientInject" class="btn btn-warning pull-right" onclick="injectData(' + position + ');" >Inject</button></td></tr>'; 
      sOut += '</table>'; 


      openBtn.src = "images/details_close.png"; 
      eventsTable.fnOpen(nTr, sOut, 'details'); 

     } 

我看那个解决同样的问题,但不知道浏览器是怎么知道的变量“PTR”是的DOM之前点击事件前一个问题。 JQuery Datatables Close Each Open Row with fnClose()

谢谢。

编辑:pTr指向当前nTr。我以前没有意识到,这个解决方案为我工作。

我能找出我做错了什么这里是正确的代码:

//store state of open rows 
//global variables 
var currentExpanded; 
var currentExpandedImg; 

if(eventsTable.fnIsOpen(currentExpanded) && currentExpanded!=nTr){ 

     currentExpandedImg.src = "images/details_open.png"; 
     eventsTable.fnClose(currentExpanded); 

    } 
    if(eventsTable.fnIsOpen(nTr)){ 

     openBtn.src = "images/details_open.png"; 
     eventsTable.fnClose(nTr); 
    } 
    else { 
     var aData = eventsTable.fnGetData(nTr); 
     var sOut = '<table cellpadding="5" cellspacing="0" border="0" style="attribute=isClose; padding-left:50px; border: 1px solid black; width: 100%; word-wrap:break-word;table-layout: fixed;">'; 
     sOut += '<tr><td style="width:10%">Cnt:</td><td>' + aData[1] + '</td></tr>'; 
     sOut += '<tr><td style="width:10%">Time:</td><td>' + aData[2] + '</td></tr>'; 
     sOut += '<tr><td style="width:10%">Type:</td><td>' + aData[3] + '</td></tr>'; 
     //sOut += '<tr><td style="width:10%">Field 5:</td><td>' + aData[5] + '</td></tr>'; 
     sOut += '<tr><td style="width:10%">Details:</td><td><pre>' + aData[6] + '</pre></td></tr>'; 
     sOut += '<tr><td style="width:10%"></td><td></td></tr>'; 
     sOut += '<tr><td style="width:10%"></td><td><button id="btnClientInject" class="btn btn-warning pull-right" onclick="injectData(' + position + ');" >Inject</button></td></tr>'; 
     sOut += '</table>'; 


     openBtn.src = "images/details_close.png"; 
     currentExpandedImg = openBtn; 
     eventsTable.fnOpen(nTr, sOut, 'details'); 
     currentExpanded = nTr; 
    }