2015-11-09 2 views
1

Я создал пустую таблицу в HTML; Кроме того, я добавил кнопку, которая позволяет пользователю создавать столько пустых строк, сколько необходимо. Но для каждой новой записи я добавил счетчик минут, и он начинается с нуля для каждой новой записи. Моя проблема в том, что, пока он показывает счетчик, он не обновляется. Если я добавлю новую запись, она останется в 0 и никогда не будет обновляться. Я пробовал смотреть в setIntervals и setTimeout, но я не могу заставить его работать правильно. Может кто-нибудь помочь мне выяснить, что я делаю неправильно? Спасибо заранее!Мой таймер не обновляется

HTML

<!DOCTYPE html> 
<html> 
    <link rel="stylesheet" href="style.css"> 
    <script src="script.js"></script> 
    <body>  
     <h1>Hello World</h1> 
     <table id="myTable" class="editableTable"> 
      <caption><center>Hello World</center></caption> 
      <thead> 
       <tr> 
        <th>ID</th> 
        <th>User</th> 
        <th>Time</th> 
        <th>Score</th> 
       </tr> 
      </thead> 
      <tbody id="tablebody"> 
       <tr style="display:none" id="templaterow"> 
        <td></td> 
        <td></td> 
        <td id="timer"></td> 
        <td></td>    
       </tr>   
      </tbody>    
     </table> 
     <div class="tablebuttons"> <button onclick="myCreateFunction()">Add</button></div>  
    </body> 
</html> 

CSS

html, body{ 
    top:0; 
    bottom:0; 
    left:0; 
    right:0; 
} 

h1 { 
    text-align: center; 
} 

button { 
    text-align: center; 
    word-wrap: break-word; 
    font-weight: bold; 
} 

.buttons{ 
    margin-left: auto; 
    margin-right: auto; 
    width: 600px; 
} 

* { 
    font-family:Consolas 
} 

.editableTable { 
    border:solid 1px; 
    width:100%; 
} 

.editableTable td { 
    border:solid 1px; 
} 

.editableTable .cellEditing { 
    padding: 0; 
} 
.editableTable .cellEditing input[type=text]{ 
    width:100%; 
    border:0; 
    background-color:rgb(255,253,210); 
} 

Javascript

export function updateTime(seconds: number, minutes: number) {   
      $("#timer").last().html('{0}:{1}'.format(minutes, seconds)); 
      seconds += 1; 
      if (seconds >= 60) { 
       seconds = 0; 
       minutes += 1; 
      } 
      if (minutes >= 60) { 
       minutes = 0; 
      } 
      setTimeout(updateTime, 1000, seconds, minutes); 
     }; 

     $(document).ready(function() {    
      setTimeout(updateTime, 1000, 0,0); 
     });​ 

     export function myCreateFunction(): void { 
      var newInstance = <HTMLTableElement>document.getElementById("templaterow").cloneNode(true); 
      newInstance.style.display = ""; 
      newInstance.id = null; 
      document.getElementById("tablebody").appendChild(newInstance); 
     } 
+1

Может быть, потому что вы несколько раз используют атрибут 'id'? Атрибуты 'id' предназначены для использования только один раз на странице, тогда как атрибуты' class' предназначены для нескольких экземпляров. – Quantastical

ответ

0

Пара вещи здесь ....

Прежде всего SetTimeout будет только вызвать один раз, вы должны использовать setInterval

Во-вторых, Вы не хотите иметь несколько элементов с одинаковыми идентификаторами, возможно, использовать класс вместо

+0

Im довольно новый в этом. Не могли бы вы немного рассказать об использовании класса? Может быть, пример? – mmangual83

+0

Hmmm ... Обычно атрибут class должен задавать класс css для форматирования, однако jquery позволит вам легко выбрать весь элемент с определенным классом ... например $ (". ClassName") Вы использовали #, который для ID, вы должны иметь только один элемент с определенным идентификатором, но у вас может быть несколько элементов с одним и тем же классом и выберите соответствующий. – pmeyer

+0

Возможно, это поможет ... https://learn.jquery.com/using-jquery-core/selecting-elements/ – pmeyer

Смежные вопросы