JavaScript: The Definitive Guide, 4th Edition by David Flanagan The following errata were *corrected* in the 3/05 reprint: Here's the key to the markup: [page-number]: serious technical mistake {page-number}: minor technical mistake : important language/formatting problem (page-number): language change or minor formatting problem [381-2] Example 19-3; page 381, the beginDrag() function: else if (document.attachEvent) { // IE 5+ Event Model // In the IE Event model, we can't capture events, so these handlers // are triggered when only if the event bubbles up to them. // This assumes that there aren't any intervening elements that // handle the events and stop them from bubbling. document.attachEvent("onmousemove", moveHandler); document.attachEvent("onmouseup", upHandler); } NOW READS: else if (document.attachEvent) { // IE 5+ Event Model // In the IE Event model, we capture events by calling // setCapture() on the element to capture them elementToDrag.attachEvent("onmousemove", moveHandler); elementToDrag.attachEvent("onmouseup", upHandler); elementToDrag.setCapture(); } AND, page 382, the upHandler() function: else if (document.detachEvent) { // IE 5+ Event Model document.detachEvent("onmouseup", upHandler); document.detachEvent("onmousemove", moveHandler); } NOW READS: else if (document.detachEvent) { // IE 5+ Event Model elementToDrag.detachEvent("onmouseup", upHandler); elementToDrag.detachEvent("onmousemove", moveHandler); elementToDrag.releaseCapture(); } The fix uses the setCapture() and releaseCapture() methods of IE5 to enable IE's version of event capturing. Credit for this fix goes to Bob Kline of RK Systems (http://www.rksystems.com).