Path: csiph.com!x330-a1.tempe.blueboxinc.net!newsfeed.hal-mli.net!feeder3.hal-mli.net!newsfeed.hal-mli.net!feeder1.hal-mli.net!weretis.net!feeder1.news.weretis.net!feeder.erje.net!eweka.nl!lightspeed.eweka.nl!npeer.de.kpn-eurorings.net!npeer-ng0.de.kpn-eurorings.net!newsfeed.arcor.de!newsspool4.arcor-online.net!news.arcor.de.POSTED!not-for-mail Content-Type: text/plain; charset="UTF-8" Message-ID: <1938225.aqSPkdTlGX@PointedEars.de> From: Thomas 'PointedEars' Lahn Reply-To: Thomas 'PointedEars' Lahn Organization: PointedEars Software (PES) Date: Thu, 23 Feb 2012 22:13:05 +0100 User-Agent: KNode/4.4.11 Content-Transfer-Encoding: 8Bit Subject: Re: How to write a browser based timer Newsgroups: comp.lang.javascript References: Followup-To: comp.lang.javascript MIME-Version: 1.0 Lines: 55 NNTP-Posting-Date: 23 Feb 2012 22:13:09 CET NNTP-Posting-Host: be3faa2e.newsspool2.arcor-online.net X-Trace: DXC=;^ZYG9RD8lA6PJ?[X6JIXEA9EHlD;3YcB4Fo<]lROoRA8kF "Scott Sauyet" wrote […]: >> You can certainly do what you want with Javascript. And it shouldn't >> be difficult. >> >> You need to look at three features of Javascript: >> >> - Keyboard Events, to listen for the keystrokes that matter >> - setTimeout or setInterval to occasionally check the time >> - DOM manipulation to display the results JFTR, the rather simple and proper, because reliable, approach is to call clearTimeout() if a timeout was set before, then setTimeout(), on keyup. Checking for the time that has passed since the last keypress is _not_ reliable by comparison. var timeout = null; function clearMe (timeout) { if (timeout !== null) { window.clearTimeout(timeout); } } _addEventListener(control, "keyup", function () { clearMe(timeout); timeout = window.setTimeout(function () { /* do something */ clearMe(timeout); }, 42); }, false); where _addEventListener() is a wrapper for control.addEventListener() with proprietary event-handler properties as fallback, like jsx.dom.addEventListener() in JSX:event.js [1]. For a more object-oriented implementation of the approach mentioned before, one might want to look into JSX:timeout.js [2], in particular jsx.dom.timeout.Timeout.prototype.run(). PointedEars ___________ [1] [2] -- Anyone who slaps a 'this page is best viewed with Browser X' label on a Web page appears to be yearning for the bad old days, before the Web, when you had very little chance of reading a document written on another computer, another word processor, or another network. -- Tim Berners-Lee