JavaScript® Bible Seventh Edition

Danny Goodman Michael Morrison Paul Novitski Tia Gustaff Rayl

WILEY Wiley Publishing, Inc. Introduction xxv

Part I: Getting Started with JavaScript 1

Chapter 1: JavaScript's Role in the World Wide Web and Beyond 3 Competing for Web Traffic 4 Other Web Technologies 4 JavaScript: A Language for All 10 JavaScript: The Right Tool for the Right Job 12 Chapter 2: Developing a Scripting Strategy 15 Browser Leapfrog 15 Duck and Cover 16 Compatibility Issues Today 17 Developing a Scripting Strategy 22 Chapter 3: Selecting and Using Your Tools 27 The Software Tools 27 Setting Up Your Authoring Environment 28 Validate, Validate, Validate 31 Creating Your First Script 31 Chapter 4: JavaScript Essentials 37 Combining JavaScript with HTML 37 Designing for Compatibility 51 Language Essentials for Experienced Programmers 54

Part II: JavaScript Tutorial 59

Chapter 5: Your First JavaScript Script 61 What Your First Script Will Do 61 Entering Your First Script 62 Have Some Fun 74 Exercises 75 Chapter 6: Browser and Document Objects 77 Scripts Run the Show 77 When to Use JavaScript 78 The 79 When a Document Loads 82 xvii Contents

Object References 85 Node Terminology 87 What Defines an Object? 88 Exercises 93 Chapter 7: Scripts and HTML Documents 95 Connecting Scripts to Documents 95 JavaScript Statements 99 When Script Statements Execute 100 Viewing Script Errors 104 Scripting versus Programming 105 Exercises 106 Chapter 8: Programming Fundamentals, Part I 109 What Language Is This? 109 Working with Information 109 Variables 110 Expressions and Evaluation 112 Data Type Conversions 115 Operators 116 Exercises 118 Chapter 9: Programming Fundamentals, Part II 121 Decisions and Loops 121 Control Structures 122 Repeat Loops 124 Functions 124 Curly Braces 128 Arrays 129 Exercises 133 Chapter 10: Window and Document Objects 135 Top-Level Objects 135 The window Object 135 window Properties and Methods 139 The location Object 142 The navigator Object 143 The document Object 143 Exercises 152 Chapter 11: Forms and Form Elements 153 The Form object 153 Form Controls as Objects 158 Passing Elements to Functions with this 170 Submitting and Prevalidating Forms 173 Exercises 177 Chapter 12: Strings, Math, and Dates 179 Core Language Objects 179 String Objects 180 The Math Object 183 The Date Object 184 xviii Contents

Date Calculations 186 Exercises 189 Chapter 13: Scripting Frames and Multiple Windows 191 Frames: Parents and Children 191 References Among Family Members 194 Frame-Scripting Tips 195 About iframe Elements 196 Highlighting Footnotes: A Frameset Scripting Example 196 References for Multiple Windows 202 Exercises 206 Chapter 14: Images and Dynamic HTML 207 The Image Object 207 Rollovers Without Scripts 216 The : Pseudo-URL 219 Popular Dynamic HTML Techniques 220 Exercises 222

Part III: JavaScript Core Language Reference 223

Chapter 15: The String Object 225 String and Number Data Types 225 String Object 228 String Utility Functions 261 URL String Encoding and Decoding 267 Chapter 16: The Math, Number, and Boolean Objects 269 Numbers in JavaScript 269 Math Object 276 Number Object 280 Boolean Object 284 Chapter 17: The Date Object 285 Time Zones and GMT 285 The Date Object 287 Validating Date Entries in Forms 304 Chapter 18: The Array Object 311 Structured Data 311 Creating an Empty Array 312 Populating an Array 313 JavaScript Array Creation Enhancements 314 Deleting Array Entries 315 Parallel Arrays 315 Multidimensional Arrays 320 Simulating a Hash Table 321 Array Object 323 Array Comprehensions 353

xix Contents

Destructuring Assignment 354 Compatibility with Older Browsers 355 Chapter 19: JSON - Native JavaScript Object Notation 357 How JSON Works 357 Sending and Receiving JSON Data 359 JSON Object 360 Security Concerns 361 Chapter 20: E4X - Native XML Processing 363 XML 363 ECMAScript for XML (E4X) 364 Chapter 21: Control Structures and Exception Handling 373 If and If. . .Else Decisions 373 Conditional Expressions ...J i , 379 The switch Statement .! 380 Repeat (for) Loops ' 384 The while Loop 388 The do-while Loop 390 Looping through Properties (for-in) 390 The with Statement 392 Labeled Statements 393 Exception Handling 397 Using try-catch-finally Constructions 398 Throwing Exceptions 402 Error Object 407 Chapter 22: JavaScript Operators 411 Operator Categories 411 Comparison Operators 412 Equality of Disparate Data Types 413 Connubial Operators 415 Assignment Operators 418 Boolean Operators 420 Bitwise Operators 424 Object Operators 425 Miscellaneous Operators 430 Operator Precedence 433 Chapter 23: Function Objects and Custom Objects 437 Function Object 437 Function Application Notes 447 Creating Your Own Objects with Object-Oriented JavaScript 458 Object-Oriented Concepts 470 Object Object 474 Chapter 24: Global Functions and Statements 481 Functions 482 Statements 492 WinlE Objects 496

XX Contents

Part IV: Document Objects Reference 501

Chapter 25: Document Object Model Essentials 503 The Object Model Hierarchy 503 How Document Objects Are Born ; 505 Object Properties 506 Object Methods 507 Object Event Handlers 508 Object Model Smorgasbord 509 Basic Object Model 510 Basic Object Model Plus Images 511 Navigator 4-Only Extensions 511 4+ Extensions 512 Internet Explorer 5+ Extensions 515 The W3CDOM 516 Scripting Trends 532 Standards Compatibility Modes (DOCTYPE Switching) 534 Where to Go from Here 535 Chapter 26: Generic HTML Element Objects 537 Generic Objects 537 Chapter 27: Window and Frame Objects 739 Window Terminology 739 Frames 740 window Object 746 frame Element Object 854 frameset Element Object 862 iframe Element Object 868 popup Object 875 Chapter 28: Location and History Objects 881 location Object 881 history Object 900 Chapter 29: Document and Body Objects 907 document Object 908 body Element Object 981 TreeWalker Object 990 Chapter 30: Link and Anchor Objects 995 Anchor, Link, and a Element Objects 995 Chapter 31: Image, Area, Map, and Canvas Objects 1003 Image and img Element Objects 1003 area Element Object 1024 map Element Object 1028 canvas Element Object 1032

xxi Contents

Chapter 32: Event Objects 1043 Why "Events"? 1044 Event Propagation 1045 Referencing the event Object 1059 Binding Events 1059 event Object Compatibility 1064 Dueling Event Models 1066 Event Types 1070 NN6+/MOZ event Object 1097

PartV: Appendixes 1123

Appendix A: JavaScript and Browser Objects Quick Reference 1125 Appendix B: What's on the CD-ROM 1133

Index 1137

Bonus Chapters on the CD-ROM

Part VI: Document Objects Reference (continued) BC1

Chapter 33: Body Text Objects BC2 Chapter 34: The Form and Related Objects BC103 Chapter 35: Button Objects BC128 Chapter 36: Text-Related Form Objects BC153 Chapter 37: Select, Option, and FileUpload Objects BC177 Chapter 38: Style Sheet and Style Objects BC207 Chapter 39: Ajax, E4X, and XML BC272 Chapter 40: HTML Directive Objects BC289 Chapter 41: Table and List Objects BC303 Chapter 42: The Navigator and Other Environment Objects BC360 Chapter 43: Positioned Objects BC411 xxii Contents

Chapter 44: Embedded Objects BC448 Chapter 45: The Regular Expression and RegExp Objects BC465

Part VII: More JavaScript Programming BC491

Chapter 46: Data-Entry Validation BC492 Chapter 47: Scripting Java Applets and Plug-Ins BC524

Chapter 48: Debugging Scripts BC564 Chapter 49: Security and Netscape Signed Scripts BC590 Chapter 50: Cross-Browser Dynamic HTML Issues BC608 Chapter 51: Internet Explorer Behaviors BC623

Part VIII: Applications BC636

Chapter 52: Application: Tables and Calendars BC637 Chapter 53: Application: A Lookup Table BC652 Chapter 54: Application: A Poor Man's Order Form BC665 Chapter 55: Application: Outline-Style Table of Contents BC674 Chapter 56: Application: Calculations and Graphics BC695 Chapter 57: Application: Intelligent "Updated" Flags BC705 Chapter 58: Application: Decision Helper BC715 Chapter 59: Application: Cross-Browser DHTML Map Puzzle BC747 Chapter 60: Application: Transforming XML Data BC764

Chapter 61: Application: Creating Custom Google Maps BC782

Part IX: Appendixes (continued) BC799

Appendix C: JavaScript Reserved Words BC800 Appendix D: Answers to Tutorial Exercises BC801 Appendix E: JavaScript and DOM Internet Resources BC818