2015-05-10 4 views
1

Я беспокоился об этой проблеме какое-то время, у меня есть таймер с четырьмя кнопками запуска, остановки, сброса и кругов, когда я звоню Stopwatch.start();, Stopwatch.stop(); или Stopwatch.reset(); он работает просто отлично но когда я пытаюсь позвонить Stopwatch.lap();, это не сработает!Вызовите функцию круга в таймере

У меня был ответ раньше, но теперь у меня есть новый компьютер и тому подобное, и я не могу вызвать функцию. Консоль говорит: «Uncaught TypeError: Stopwatch.lap не является функцией», и я не могу найти проблему.

Вот мой код:

var Stopwatch = { 
init: function(elem, options) { 

    var timer  = createTimer(), 
      startButton = createButton("start", start), 
     stopButton = createButton("stop", stop), 
     resetButton = createButton("reset", reset), 
      lapButton = createButton("lap", lap), 
      lapSpan  = createTimer(), 
     offset, 
     clock, 
     interval; 

    options = options || {}; 
    options.delay = options.delay || 1; 

    elem.appendChild(timer); 
    elem.appendChild(startButton); 
    elem.appendChild(stopButton); 
    elem.appendChild(resetButton); 
    elem.appendChild(lapButton); 
    elem.appendChild(lapSpan); 

    reset(); 

    function createTimer() { 
     return document.createElement("span"); 
    } 

    function createButton(action, handler) { 
     var a = document.createElement("a"); 
     a.href = "#" + action; 
     a.innerHTML = action; 
     a.addEventListener("click", function(event) { 
      handler(); 
      event.preventDefault(); 
     }); 
     return a; 
    } 

    function start() { 
     if (!interval) { 
      offset = Date.now(); 
      interval = setInterval(update, options.delay); 
     } 
    } 

    function stop() { 
     if (interval) { 
      clearInterval(interval); 
      interval = null; 
     } 
    } 

    function lap() { 
      lapSpan.innerHTML=timer.innerHTML; 
     } 

    function reset() { 
     clock = 0; 
     render(0); 
       lap(); 
    } 

    function update() { 
     clock += delta(); 
     render(); 
    } 

    function render() { 
     timer.innerHTML = clock/1000; 
    } 

    function delta() { 
     var now = Date.now(), 
     d = now - offset; 

     offset = now; 
     return d; 
    } 

     this.getTime=function() { 
      return clock; 
     } 

    this.start = start; 
    this.stop = stop; 
    this.reset = reset; 
} 
}; 
var elems; 
window.onload=function() { 
    elems = document.getElementsByClassName("basic"); 
    for (var i = 0, len = elems.length; i < len; i++) { 
     Stopwatch.init(elems[i]); 
    } 
} 

И мне нужно, чтобы вызвать функцию круга при нажатии определенной клавиши, и это выглядит следующим образом:

document.onkeypress = function(e) { 
e = e || window.event; 
var charCode = e.charCode || e.keyCode, 
character = String.fromCharCode(charCode); 

if(e.charCode == 98 || e.keyCode == 98) { 
    Stopwatch.start(); 

} else if(e.charCode == 114 || e.keyCode == 114) { 
    Stopwatch.lap(); 

} 
}; 

я знаком с JavaScript и jQuery в этом проекте, но я также знаю HTML и JavaScript.

+4

Я supose вам нужно добавить 'this.lap = коленей;' и в конце этого класса/объекта ... – Rikard

+1

OMG Спасибо так много, выкладываю ответ и Я отмечу это как ответ! : D – Nikki

ответ

4

Ты определить функцию внутри класса/объекта бушель вы забыли добавить this.lap = lap;, так что вы можете использовать его как метод/имущество.

Должно быть:

this.start = start; 
this.stop = stop; 
this.reset = reset; 
this.lap = lap; // this one was missing 
2

Вам нужно добавить

this.lap = lap; 

после линий

this.start = start; 
this.stop = stop; 
this.reset = reset; 
Смежные вопросы