DataTables logo DataTables

via Ad Packs
Show/Hide details about particular row
  • badeabadea
    Posts: 16
    Hi to all !

    I added the code for hide/Show details about particular row as it described here - http://datatables.net/release-datatables/examples/api/row_details.html.
    But the details button (image) is not clickable.
    The only modification i made to my code - I changed the "live" event with "on" (because i am using jquery 1.7.1).
    I tried with "live" - also didn't work.

    My code is:
    
    /* Formating function for row details */
    function fnFormatDetails ( oTable, nTr )
    {
        var aData = oTable.fnGetData( nTr );
        var sOut = '<table cellpadding="5" cellspacing="0" border="0" style="padding-left:50px;">';
        //sOut += '<tr><td>Rendering engine:</td><td>'+aData[1]+' '+aData[4]+'</td></tr>';
        sOut += '<tr><td>Rendering engine:</td><td>aaaaaaaa</td></tr>';
        sOut += '<tr><td>Link to source:</td><td>Could provide a link here</td></tr>';
        sOut += '<tr><td>Extra info:</td><td>And any further details here (images etc)</td></tr>';
        sOut += '</table>';
    
        return sOut;
    }
    
    
    // var oTable;
    			$(document).ready(function() {
    
    
    /*
         * Insert a 'details' column to the table
         */
        var nCloneTh = document.createElement( 'th' );
        var nCloneTd = document.createElement( 'td' );
        nCloneTd.innerHTML = '<img src="images/details_open.png">';
        nCloneTd.className = "center";
    
        $('#example thead tr').each( function () {
            this.insertBefore( nCloneTh, this.childNodes[0] );
        } );
    
        $('#example tbody tr').each( function () {
            this.insertBefore(  nCloneTd.cloneNode( true ), this.childNodes[0] );
        } );
    
    			var oTable = $('#example').dataTable( {
                        "sPaginationType": "full_numbers",
    					"aoColumnDefs": [{ "bSortable": false, "aTargets": [ 0 ] }],
    					"aaSorting": [[ 1, "desc" ]],
    					"bProcessing": true,
    					"bServerSide": true,
    					"bInfo": false,                  // disabling showing info entry
    					"sAjaxSource": "view.php"
    				} );
    
    /* Add event listener for opening and closing details
         * Note that the indicator for showing which row is open is not controlled by DataTables,
         * rather it is done here
         */
    
    	$('#example tbody td img').on('click', function () {
            var nTr = $(this).parents('tr')[0];
            if ( oTable.fnIsOpen(nTr) )
            {
                /* This row is already open - close it */
                this.src = "images/details_open.png";
                oTable.fnClose( nTr );
            }
            else
            {
                /* Open this row */
                this.src = "images/details_close.png";
                oTable.fnOpen( nTr, fnFormatDetails(oTable, nTr), 'details' );
            }
        } );
    
    
    
    			} );
    
    

    What I am doing wrong ? Any help will be apreciated.

    Thanks.
  • allanallan
    Posts: 15,882
    Try making your event handler 'live' as it is currently static:

    $('#example tbody').on('click', ' td img', function ...
    

    That should work. See also http://datatables.net/faqs#events .

    Allan
  • badeabadea
    Posts: 16
    Hi Allan.

    I tried both "live" and "on" event, but don't work anyway.
    What i'am doing wrong ?
    Please, review again my code.

    Thanks for reply.
    Best regards,
    Andrei.
  • Hi Andrei,
    I am working with similar issues see discussion "Expanded rows after ajax refresh"
    I am using a slightly different approach where I add an ID to the cell where the expand image is:

     nCloneTd.innerHTML = '<img src="images/details_open.png" id="open">'
    

    And then for the click action the following
     $('#open').live('click', function () {
            var nTr = $(this).parents('tr')[0];
      
            if ( oTable.fnIsOpen(nTr) )
    

    Which fits in to your code.
    Hope that helps a bit

    Cheers
    D
  • badeabadea
    Posts: 16
    Hi Bolki !

    Thanks for reply ! It works! But i also have to upgrade datatables from 1.8 to 1.9 because of "fnIsOpen" function, that work from version 1.9
    Another issue that i trouble in, after i added show/hide details about particular row -
    the sorting don't work correctly. All columns doesn't sort in the right way.
    I use:

    "aoColumnDefs": [{ "bSortable": false, "aTargets": [ 0 ] }],
                        "aaSorting": [[ 1, "desc" ]],
    

    Any suggestions ?
    Best regards.
This discussion has been closed.
← All Discussions

Howdy, Stranger!

It looks like you're new here. If you want to get involved, click one of these buttons!

Support

Get useful and friendly help straight from the source.

In this Discussion