1

I am trying to incorporate a scrollable <tbody> using gavroche's solution. So far, this is what I have:

JS:

var tblcols = 7; // table columns
var tblClass = ".scroll"; // table class

for(var i = 0; i < tblcols; i++) {
    var thWidth = $(tblClass).find("th:eq(" + i + ")").width();
    var tdWidth = $(tblClass).find("td:eq(" + i + ")").width();

    if(thWidth < tdWidth)
        $(tblClass).find("th:eq(" + i + ")").width(tdWidth);
    else
        $(tblClass).find("td:eq(" + i + ")").width(thWidth);
}

CSS:

.scroll table {
    margin: 0 auto;
    border-collapse: separate;
}

.scroll thead {
    display: block;
}

.scroll tbody {
    height: 30em;
    overflow-y: scroll;
    display: block;
}

HTML:

<table id="viewfaculty" class="scroll">
    <thead align="center">
        <tr>
            <th><a href="viewfaculty?orderBy=professor_id">ID</a></th>
            <th><a href="viewfaculty?orderBy=professor_last_name">L. Name</a></th>
            <th>F. Name</th>
            <th>Sex</th>
            <th>Email</th>
            <th><a href="viewfaculty?orderBy=professor_employment_status">Empl. Status</a></th>
            <th><a href="viewfaculty?orderBy=professor_department">Dept.</a></th>
        </tr>
    </thead>

    <tbody>
        <s:if test="#session.facultyList.isEmpty()">
            <tr align="center">
                <td colspan="7"><p class="norecords">NO RECORDS FOUND</p></td>
            </tr>
        </s:if>

        <c:forEach var="professor" items="${facultyList}">
            <tr>
                <td align="center">${professor.profId}</td>
                <td>${professor.profLastName}</td>
                <td>${professor.profFirstName}</td>
                <td align="center">${professor.profSex}</td>
                <td>${professor.profEmail}</td>
                <td align="center">${professor.profEmplStatus}</td>
                <td align="center">${professor.profDept}</td>
            </tr>
        </c:forEach>
    </tbody>
</table>

Output: scroll

How do I make the header row stretch across the whole table?

Community
  • 1
  • 1
k_rollo
  • 5,304
  • 16
  • 63
  • 95

2 Answers2

3

It looks like there is a problem preventing your JS from executing. I dropped your code into a fiddle and it works. If I remove the JS, I get the same result you are getting:

$(document).ready( function(){
    var tblcols = 7; // table columns
    var tblClass = ".scroll"; // table class
    
    for(var i = 0; i < tblcols; i++) {
        var thWidth = $(tblClass).find("th:eq(" + i + ")").width();
        var tdWidth = $(tblClass).find("td:eq(" + i + ")").width();
        
        if(thWidth < tdWidth)
            $(tblClass).find("th:eq(" + i + ")").width(tdWidth);
        else
            $(tblClass).find("td:eq(" + i + ")").width(thWidth);
    }
});
.scroll table {
    margin: 0 auto;
    border-collapse: separate;
}

.scroll thead {
    display: block;
}

.scroll tbody {
    height: 30em;
    overflow-y: scroll;
    display: block;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table id="viewfaculty" class="scroll">
    <thead>
        <tr align="center">
            <th><a href="viewfaculty?orderBy=professor_id">ID</a></th>
            <th><a href="viewfaculty?orderBy=professor_last_name">L. Name</a></th>
            <th>F. Name</th>
            <th>Sex</th>
            <th>Email</th>
            <th><a href="viewfaculty?orderBy=professor_employment_status">Empl. Status</a></th>
            <th><a href="viewfaculty?orderBy=professor_department">Dept.</a></th>
        </tr>
    </thead>
    
    <tbody>
        <tr>
            <td align="center">${professor.profId}</td>
            <td>${professor.profLastName}</td>
            <td>${professor.profFirstName}</td>
            <td align="center">${professor.profSex}</td>
            <td>${professor.profEmail}</td>
            <td align="center">${professor.profEmplStatus}</td>
            <td align="center">${professor.profDept}</td>
        </tr>
        <tr>
            <td align="center">${professor.profId}</td>
            <td>${professor.profLastName}</td>
            <td>${professor.profFirstName}</td>
            <td align="center">${professor.profSex}</td>
            <td>${professor.profEmail}</td>
            <td align="center">${professor.profEmplStatus}</td>
            <td align="center">${professor.profDept}</td>
        </tr>
        <tr>
            <td align="center">${professor.profId}</td>
            <td>${professor.profLastName}</td>
            <td>${professor.profFirstName}</td>
            <td align="center">${professor.profSex}</td>
            <td>${professor.profEmail}</td>
            <td align="center">${professor.profEmplStatus}</td>
            <td align="center">${professor.profDept}</td>
        </tr>
        <tr>
            <td align="center">${professor.profId}</td>
            <td>${professor.profLastName}</td>
            <td>${professor.profFirstName}</td>
            <td align="center">${professor.profSex}</td>
            <td>${professor.profEmail}</td>
            <td align="center">${professor.profEmplStatus}</td>
            <td align="center">${professor.profDept}</td>
        </tr>
        <tr>
            <td align="center">${professor.profId}</td>
            <td>${professor.profLastName}</td>
            <td>${professor.profFirstName}</td>
            <td align="center">${professor.profSex}</td>
            <td>${professor.profEmail}</td>
            <td align="center">${professor.profEmplStatus}</td>
            <td align="center">${professor.profDept}</td>
        </tr>
        <tr>
            <td align="center">${professor.profId}</td>
            <td>${professor.profLastName}</td>
            <td>${professor.profFirstName}</td>
            <td align="center">${professor.profSex}</td>
            <td>${professor.profEmail}</td>
            <td align="center">${professor.profEmplStatus}</td>
            <td align="center">${professor.profDept}</td>
        </tr>
        <tr>
            <td align="center">${professor.profId}</td>
            <td>${professor.profLastName}</td>
            <td>${professor.profFirstName}</td>
            <td align="center">${professor.profSex}</td>
            <td>${professor.profEmail}</td>
            <td align="center">${professor.profEmplStatus}</td>
            <td align="center">${professor.profDept}</td>
        </tr>
        <tr>
            <td align="center">${professor.profId}</td>
            <td>${professor.profLastName}</td>
            <td>${professor.profFirstName}</td>
            <td align="center">${professor.profSex}</td>
            <td>${professor.profEmail}</td>
            <td align="center">${professor.profEmplStatus}</td>
            <td align="center">${professor.profDept}</td>
        </tr>
        <tr>
            <td align="center">${professor.profId}</td>
            <td>${professor.profLastName}</td>
            <td>${professor.profFirstName}</td>
            <td align="center">${professor.profSex}</td>
            <td>${professor.profEmail}</td>
            <td align="center">${professor.profEmplStatus}</td>
            <td align="center">${professor.profDept}</td>
        </tr>
        <tr>
            <td align="center">${professor.profId}</td>
            <td>${professor.profLastName}</td>
            <td>${professor.profFirstName}</td>
            <td align="center">${professor.profSex}</td>
            <td>${professor.profEmail}</td>
            <td align="center">${professor.profEmplStatus}</td>
            <td align="center">${professor.profDept}</td>
        </tr>
        <tr>
            <td align="center">${professor.profId}</td>
            <td>${professor.profLastName}</td>
            <td>${professor.profFirstName}</td>
            <td align="center">${professor.profSex}</td>
            <td>${professor.profEmail}</td>
            <td align="center">${professor.profEmplStatus}</td>
            <td align="center">${professor.profDept}</td>
        </tr>
        <tr>
            <td align="center">${professor.profId}</td>
            <td>${professor.profLastName}</td>
            <td>${professor.profFirstName}</td>
            <td align="center">${professor.profSex}</td>
            <td>${professor.profEmail}</td>
            <td align="center">${professor.profEmplStatus}</td>
            <td align="center">${professor.profDept}</td>
        </tr>
        <tr>
            <td align="center">${professor.profId}</td>
            <td>${professor.profLastName}</td>
            <td>${professor.profFirstName}</td>
            <td align="center">${professor.profSex}</td>
            <td>${professor.profEmail}</td>
            <td align="center">${professor.profEmplStatus}</td>
            <td align="center">${professor.profDept}</td>
        </tr>
        <tr>
            <td align="center">${professor.profId}</td>
            <td>${professor.profLastName}</td>
            <td>${professor.profFirstName}</td>
            <td align="center">${professor.profSex}</td>
            <td>${professor.profEmail}</td>
            <td align="center">${professor.profEmplStatus}</td>
            <td align="center">${professor.profDept}</td>
        </tr>
        <tr>
            <td align="center">${professor.profId}</td>
            <td>${professor.profLastName}</td>
            <td>${professor.profFirstName}</td>
            <td align="center">${professor.profSex}</td>
            <td>${professor.profEmail}</td>
            <td align="center">${professor.profEmplStatus}</td>
            <td align="center">${professor.profDept}</td>
        </tr>
        <tr>
            <td align="center">${professor.profId}</td>
            <td>${professor.profLastName}</td>
            <td>${professor.profFirstName}</td>
            <td align="center">${professor.profSex}</td>
            <td>${professor.profEmail}</td>
            <td align="center">${professor.profEmplStatus}</td>
            <td align="center">${professor.profDept}</td>
        </tr>
        <tr>
            <td align="center">${professor.profId}</td>
            <td>${professor.profLastName}</td>
            <td>${professor.profFirstName}</td>
            <td align="center">${professor.profSex}</td>
            <td>${professor.profEmail}</td>
            <td align="center">${professor.profEmplStatus}</td>
            <td align="center">${professor.profDept}</td>
        </tr>
        <tr>
            <td align="center">${professor.profId}</td>
            <td>${professor.profLastName}</td>
            <td>${professor.profFirstName}</td>
            <td align="center">${professor.profSex}</td>
            <td>${professor.profEmail}</td>
            <td align="center">${professor.profEmplStatus}</td>
            <td align="center">${professor.profDept}</td>
        </tr>
        <tr>
            <td align="center">${professor.profId}</td>
            <td>${professor.profLastName}</td>
            <td>${professor.profFirstName}</td>
            <td align="center">${professor.profSex}</td>
            <td>${professor.profEmail}</td>
            <td align="center">${professor.profEmplStatus}</td>
            <td align="center">${professor.profDept}</td>
        </tr>
        <tr>
            <td align="center">${professor.profId}</td>
            <td>${professor.profLastName}</td>
            <td>${professor.profFirstName}</td>
            <td align="center">${professor.profSex}</td>
            <td>${professor.profEmail}</td>
            <td align="center">${professor.profEmplStatus}</td>
            <td align="center">${professor.profDept}</td>
        </tr>
        <tr>
            <td align="center">${professor.profId}</td>
            <td>${professor.profLastName}</td>
            <td>${professor.profFirstName}</td>
            <td align="center">${professor.profSex}</td>
            <td>${professor.profEmail}</td>
            <td align="center">${professor.profEmplStatus}</td>
            <td align="center">${professor.profDept}</td>
        </tr>
        <tr>
            <td align="center">${professor.profId}</td>
            <td>${professor.profLastName}</td>
            <td>${professor.profFirstName}</td>
            <td align="center">${professor.profSex}</td>
            <td>${professor.profEmail}</td>
            <td align="center">${professor.profEmplStatus}</td>
            <td align="center">${professor.profDept}</td>
        </tr>
        <tr>
            <td align="center">${professor.profId}</td>
            <td>${professor.profLastName}</td>
            <td>${professor.profFirstName}</td>
            <td align="center">${professor.profSex}</td>
            <td>${professor.profEmail}</td>
            <td align="center">${professor.profEmplStatus}</td>
            <td align="center">${professor.profDept}</td>
        </tr>
        <tr>
            <td align="center">${professor.profId}</td>
            <td>${professor.profLastName}</td>
            <td>${professor.profFirstName}</td>
            <td align="center">${professor.profSex}</td>
            <td>${professor.profEmail}</td>
            <td align="center">${professor.profEmplStatus}</td>
            <td align="center">${professor.profDept}</td>
        </tr>
        <tr>
            <td align="center">${professor.profId}</td>
            <td>${professor.profLastName}</td>
            <td>${professor.profFirstName}</td>
            <td align="center">${professor.profSex}</td>
            <td>${professor.profEmail}</td>
            <td align="center">${professor.profEmplStatus}</td>
            <td align="center">${professor.profDept}</td>
        </tr>
        <tr>
            <td align="center">${professor.profId}</td>
            <td>${professor.profLastName}</td>
            <td>${professor.profFirstName}</td>
            <td align="center">${professor.profSex}</td>
            <td>${professor.profEmail}</td>
            <td align="center">${professor.profEmplStatus}</td>
            <td align="center">${professor.profDept}</td>
        </tr>
        <tr>
            <td align="center">${professor.profId}</td>
            <td>${professor.profLastName}</td>
            <td>${professor.profFirstName}</td>
            <td align="center">${professor.profSex}</td>
            <td>${professor.profEmail}</td>
            <td align="center">${professor.profEmplStatus}</td>
            <td align="center">${professor.profDept}</td>
        </tr>
        <tr>
            <td align="center">${professor.profId}</td>
            <td>${professor.profLastName}</td>
            <td>${professor.profFirstName}</td>
            <td align="center">${professor.profSex}</td>
            <td>${professor.profEmail}</td>
            <td align="center">${professor.profEmplStatus}</td>
            <td align="center">${professor.profDept}</td>
        </tr>
        <tr>
            <td align="center">${professor.profId}</td>
            <td>${professor.profLastName}</td>
            <td>${professor.profFirstName}</td>
            <td align="center">${professor.profSex}</td>
            <td>${professor.profEmail}</td>
            <td align="center">${professor.profEmplStatus}</td>
            <td align="center">${professor.profDept}</td>
        </tr>
        <tr>
            <td align="center">${professor.profId}</td>
            <td>${professor.profLastName}</td>
            <td>${professor.profFirstName}</td>
            <td align="center">${professor.profSex}</td>
            <td>${professor.profEmail}</td>
            <td align="center">${professor.profEmplStatus}</td>
            <td align="center">${professor.profDept}</td>
        </tr>
        <tr>
            <td align="center">${professor.profId}</td>
            <td>${professor.profLastName}</td>
            <td>${professor.profFirstName}</td>
            <td align="center">${professor.profSex}</td>
            <td>${professor.profEmail}</td>
            <td align="center">${professor.profEmplStatus}</td>
            <td align="center">${professor.profDept}</td>
        </tr>
        <tr>
            <td align="center">${professor.profId}</td>
            <td>${professor.profLastName}</td>
            <td>${professor.profFirstName}</td>
            <td align="center">${professor.profSex}</td>
            <td>${professor.profEmail}</td>
            <td align="center">${professor.profEmplStatus}</td>
            <td align="center">${professor.profDept}</td>
        </tr>
        <tr>
            <td align="center">${professor.profId}</td>
            <td>${professor.profLastName}</td>
            <td>${professor.profFirstName}</td>
            <td align="center">${professor.profSex}</td>
            <td>${professor.profEmail}</td>
            <td align="center">${professor.profEmplStatus}</td>
            <td align="center">${professor.profDept}</td>
        </tr>
        <tr>
            <td align="center">${professor.profId}</td>
            <td>${professor.profLastName}</td>
            <td>${professor.profFirstName}</td>
            <td align="center">${professor.profSex}</td>
            <td>${professor.profEmail}</td>
            <td align="center">${professor.profEmplStatus}</td>
            <td align="center">${professor.profDept}</td>
        </tr>
        <tr>
            <td align="center">${professor.profId}</td>
            <td>${professor.profLastName}</td>
            <td>${professor.profFirstName}</td>
            <td align="center">${professor.profSex}</td>
            <td>${professor.profEmail}</td>
            <td align="center">${professor.profEmplStatus}</td>
            <td align="center">${professor.profDept}</td>
        </tr>
        <tr>
            <td align="center">${professor.profId}</td>
            <td>${professor.profLastName}</td>
            <td>${professor.profFirstName}</td>
            <td align="center">${professor.profSex}</td>
            <td>${professor.profEmail}</td>
            <td align="center">${professor.profEmplStatus}</td>
            <td align="center">${professor.profDept}</td>
        </tr>
        <tr>
            <td align="center">${professor.profId}</td>
            <td>${professor.profLastName}</td>
            <td>${professor.profFirstName}</td>
            <td align="center">${professor.profSex}</td>
            <td>${professor.profEmail}</td>
            <td align="center">${professor.profEmplStatus}</td>
            <td align="center">${professor.profDept}</td>
        </tr>
        <tr>
            <td align="center">${professor.profId}</td>
            <td>${professor.profLastName}</td>
            <td>${professor.profFirstName}</td>
            <td align="center">${professor.profSex}</td>
            <td>${professor.profEmail}</td>
            <td align="center">${professor.profEmplStatus}</td>
            <td align="center">${professor.profDept}</td>
        </tr>
        <tr>
            <td align="center">${professor.profId}</td>
            <td>${professor.profLastName}</td>
            <td>${professor.profFirstName}</td>
            <td align="center">${professor.profSex}</td>
            <td>${professor.profEmail}</td>
            <td align="center">${professor.profEmplStatus}</td>
            <td align="center">${professor.profDept}</td>
        </tr>
        <tr>
            <td align="center">${professor.profId}</td>
            <td>${professor.profLastName}</td>
            <td>${professor.profFirstName}</td>
            <td align="center">${professor.profSex}</td>
            <td>${professor.profEmail}</td>
            <td align="center">${professor.profEmplStatus}</td>
            <td align="center">${professor.profDept}</td>
        </tr>
        <tr>
            <td align="center">${professor.profId}</td>
            <td>${professor.profLastName}</td>
            <td>${professor.profFirstName}</td>
            <td align="center">${professor.profSex}</td>
            <td>${professor.profEmail}</td>
            <td align="center">${professor.profEmplStatus}</td>
            <td align="center">${professor.profDept}</td>
        </tr>
        <tr>
            <td align="center">${professor.profId}</td>
            <td>${professor.profLastName}</td>
            <td>${professor.profFirstName}</td>
            <td align="center">${professor.profSex}</td>
            <td>${professor.profEmail}</td>
            <td align="center">${professor.profEmplStatus}</td>
            <td align="center">${professor.profDept}</td>
        </tr>
        <tr>
            <td align="center">${professor.profId}</td>
            <td>${professor.profLastName}</td>
            <td>${professor.profFirstName}</td>
            <td align="center">${professor.profSex}</td>
            <td>${professor.profEmail}</td>
            <td align="center">${professor.profEmplStatus}</td>
            <td align="center">${professor.profDept}</td>
        </tr>
    </tbody>
</table>
Seamus
  • 4,539
  • 2
  • 32
  • 42
  • Hi, almost there. I added the `$(document).ready( function(){`. The header columns just don't line up ([click](http://s29.postimg.org/xttcca19z/scroll_2.png)). Any fix? – k_rollo Mar 25 '15 at 00:10
  • I'd guess that the JS that sets the column widths is running before AngularJS fills the table with data. – Seamus Mar 25 '15 at 03:16
  • I tried moving the ` – k_rollo Mar 25 '15 at 03:23
  • You will probably need to create a custom directive, like this:https://www.pointblankdevelopment.com.au/blog/angularjs-fixed-header-scrollable-table-directive – Seamus Mar 25 '15 at 05:22
0

I figured it out. The CSS from the pre-made/open-source template was messing with how the tables were displayed by default. I removed all CSS pertaining to tables.

I also opted for a solution that does not use JavaScript.

Community
  • 1
  • 1
k_rollo
  • 5,304
  • 16
  • 63
  • 95