spacer
home / programming / javascript / jf / column7 / 1 To page 1To page 2current page
[previous]

Database Administrator - SQL Server (PA)
Next Step Systems
US-PA-King of Prussia

Justtechjobs.com Post A Job | Post A Resume
Developer News
OpenOffice 3.2 Lands Amid Critical Changes
Red Hat, IBM Firmly in KVM Virtualization Camp
Red Hat Talks Up Open Source Cloud Plans


Easy Table Reading in JavaScript

Finally, we arrive at the “onclick” event. First, we check to see if the variable “rClick” is defined; since we declared it, but didn’t define it, this test will fail the first time. Because it will fail, none of the code inside the if statement will run the first time. The function goes on to set the class of the current row to “click,” the variable “rClick” to equal the current row, and it clears the “onMouseOut” function by resetting it to just “return true” every time. Anytime that the “onclick” event is triggered after that, no matter what row is clicked, “rClick” will be defined. Therefore, the code in the if statement will run from here onwards. This code will reset the last row that was clicked to its original state; so that it’s no longer selected (its class will now be either “on” or “off”). It also resets the onMouseOut function to what it was before we cleared it when the row was clicked. This way, we reset the last clicked row each time in order to allow a different row to be selected. So if one row is selected, that row becomes deselected when a new one is clicked. If no row is selected, it will simply select whichever row was clicked.

Do You Want More?

What other ways can we enhance usability through JavaScript when styling specific rows? So far, we have (1) alternated styles between rows, (2) highlighted rows onMouseOver, and (3) selected rows. Although we’ve done almost everything possible to enhance usability, some may find it frustrating that they can only select one row. Why can’t we select as many rows as we want, and deselect whichever ones we choose? The following code will help to provide multiple points of reference:

  <script type="text/javascript"><!--
    var elem = "TR";

window.onload = function(){
  if(document.getElementsByTagName){
    var el = document.getElementsByTagName(elem);
      for(var i=0; i<el.length; i++){
        if(el[i].childNodes[0].tagName != "TH"
        && el[i].parentNode.parentNode.className.indexOf("tbl") != -1){
      if(i%2 == 1){
        el[i].className = "on";
        el[i].oldClassName = "on";
        el[i].onmouseout = function(){
                this.className = "on";
        }
    } else {
        el[i].className = "off";
        el[i].oldClassName = "off";
        el[i].onmouseout = function(){
                this.className = "off";
        }
    }
        el[i].onmouseover = function(){
            if(this.className == this.oldClassName)
               {this.className = "hover";}
            if(this.onmouseout == null && this.className != "click"){
          this.onmouseout = function(){
                this.className = this.oldClassName;
          }
             }
}
el[i].onclick = function(){
         if(this.className != "click"){
            this.className = "click";
    } else {
            this.className = this.oldClassName;
         }
       this.onmouseout = null;
     }
    }
   }
  }
}
   //--></script>

See the following example.

This time we aren’t going to need to deselect a row if a different one was selected, so there’s no need for the “rClick” variable. Instead, we’re going to just select whichever row is clicked and deselect whichever row is clicked if it is clicked. The only difference between this code and the previous code is the “onMouseOver” and “onClick” functions, so those are the only two I’ll be covering.

Starting with onMouseOver: we check to see if the current class name of the current element is equal to the old class name. If it is, we apply the hover effect. If the current row has been clicked, but is not selected (does not have the “click” attribute), it resets the “onMouseOut” function to what it was previously. The “onMouseOut” function will be null (“nothing”) if it has been clicked, because at the end of the “onClick” function, we clear “onMouseOut” by setting the function to null. This will prevent it from losing the selection when we take our mouse off of it.

OnClick: if the current row is not selected, select it. Otherwise, deselect it by setting its class name to what it was previously. Regardless of whether or not the row was selected, clear the “onMouseOut” function.

Conclusion

It’s important to note that this code may be of additional use when placed in a common JavaScript includes file, since you can control which tables are formatted by the code with the “class” attribute. It’s a good idea to experiment with using table cells (“TD”) instead of table rows (“TR”). This should be especially useful to those of you who run large corporate sites and have to squint or use some sort of pointing device to determine which line you were reading. Worse, when you look away from the screen, it is very difficult to find the correct row again. The JavaScript code presented in this article is intended to enhance usability and readability by adding extra functionality to your tabular information.

About the Author

Jonathan Fenocchi is a Web developer who primarily works in the fields of Web Design, client-side scripting, and PHP scripting. His web site is located at: www.cmmwebdesign.com


home / programming / javascript / jf / column7 / 1 To page 1To page 2current page
[previous]


The Network for Technology Professionals

Search:

About Internet.com

Legal Notices, Licensing, Permissions, Privacy Policy.
Advertise | Newsletters | E-mail Offers

webref The latest from WebReference.com Browse >
Search Engine Optimization: Selecting and Embedding Keywords · Are Google's Language Translation Web Services Ready for Prime Time? · Installing and Using Meeplace, the Business Review CMS
Sitemap · Experts · Tools · Services · Email a Colleague · Contact FREE Newsletters 
 The latest from internet.com
IBM DB2 10 for z/OS: Justifying the Upgrade · Living La Vida Colo: Choosing the Right Colocation Facility · FTC Concerns over Social Media Privacy Linger

Created: March 27, 2003
Revised: December 09, 2004

URL: http://webreference.com/programming/javascript/Jf/column71