指定したクリック回数でアクション!

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">

<title>クリックした回数で、アクション?</title>

<p id="a">5回押すと</p>
<p id="b">1回だけでも</p>

<script type="text/javascript">

//@cc_on @set @V = (@_jscript_version >= 5.5)

var clicker = {};

clicker.countup = (function () {
  return function (e) {
    var p = this.get(e);
    if (p) {
      p.count_buffer++;
      if (p.count_buffer == p.counter) {
        p.func.call();
        p.count_buffer = 0;
      }
    }
  };
})();


clicker.add = (function () {
  return function (eid, count, func) {
    var e = document.getElementById(eid);
    return this.put(e, count, func);
  };
})();


clicker.get = (function () {
  return function(e) {
    return this.hasOwnProperty (e.id) ? this[e.id]: null;
  };
})();


clicker.put = (function () {
  return function (e, count, func) {
    return this[e.id] = {element:e, counter:count, func:func, count_buffer:0 };
  };
})();


clicker.Listener = (function () {
  return function (evt) {
    var e = evt./*@if (@V) srcElement @else@*/ target /*@end@*/;
    return e.id && this.get (e) && this.countup(e);
  };
})();


clicker.Finalizer = (function () {
  return function (e) {
    document./*@if (@V) detachEvent ('on' + @else@*/ removeEventListener (/*@end@*/
      'click', clicker.Listener, false);
    
    /*@if (@V) detachEvent ('on' + @else@*/ removeEventListener (/*@end@*/
      'unload', clicker.Finalizer, false);
  };
})();


//_______________________________

document./*@if (@V)attachEvent('on'+ @else@*/addEventListener(/*@end@*/
  'click', clicker.Listener, false)

/*@if (@V) attachEvent ('on' + @else@*/ addEventListener (/*@end@*/
  'unload', clicker.Finalizer, false);
//_______________________________


clicker.add ('a', 5, function(){alert("5かいおした!");});
clicker.add ('b', 1, hoge);

function hoge() {
  alert("1かいおした!");
}
</script>