2016-01-08 78 views
0

我得到了這個表格內置的計算器功能,從table的不同部分中選擇,並在最後添加了所有東西。但我的問題是,如果我用裏面的字母而不是數字打了一個正方形,計算器就會中斷,我該如何解決它?內置計算器的HTML/Javascript表格

如何使第一個包含信息(汽車名稱)不可點擊,並且只有前5個方格。 表代碼:

<table> 
     <tr> 
     <th bgcolor="b8cce4">Modell</td> 
      <th>Trend</td> 
      <th>Titanum</td> 
       <th>Familiepakke</td> 
       <th>Førerassistentpakke</td> 
        <th>Stilpakke</td> 
        <th>Sluttpris</td> 
     </tr> 
     <tr> 
     <td bgcolor="b8cce4"><b>Kuga</b></td> 
     <td>401000</td> 
     <td>420000</td> 
     <td>1000</td> 
     <td>10200</td> 
     <td>9200</td> 
     <td>kr</td> 
     </tr> 
     <tr> 
     <td bgcolor="b8cce4"><b>C-max</b></td> 
     <td>320000</td> 
     <td>335000</td> 
     <td>1000</td> 
     <td>9400</td> 
     <td>3600</td> 
     <td>kr</td> 
     </tr> 
     <tr> 
     <td bgcolor="b8cce4"><b>Focus</b></td> 
     <td>255000</td> 
     <td>325000</td> 
     <td>900</td> 
     <td>12500</td> 
     <td>9000</td> 
     <td>kr</td> 
     </tr> 
     <tr> 
     <td bgcolor="b8cce4"><b>Mondeo</b></td> 
     <td>281000</td> 
     <td>361000</td> 
     <td>1100</td> 
     <td>9900</td> 
     <td>7200</td> 
     <td>kr</td> 
     </tr> 

腳本:

(function() { 
     var tds = document.querySelectorAll('tr td:not(:last-child)'); 
     for (var td in tds) { 
     tds[td].addEventListener('click', function(evt) { 
      evt.target.classList.toggle('selected'); 
      var total = 0; 
      var parentTr = evt.target.parentNode; 
      var selected = parentTr.querySelectorAll('.selected'); 
      for (var k in selected) { 
      if (selected[k].innerText) { 
       total += parseInt(selected[k].innerText); 
      } 
      } 
      parentTr.querySelector('td:last-child').innerText = total; 
     }); 
     } 
    })(); 

回答

0

在你的循環,測試以查看它是否是一個數字字段,然後才處理它:

if ((selected[k].innerText) && (/^\d+$/.test(selected[k].innerText))) { 
    total += parseInt(selected[k].innerText); 
} 
+0

感謝那些固定關於該框中的文本的問題,但似乎如果我點擊文本的某個地方,它會給我NaN。如何讓整個框無法識別? –

+0

您可以在上面的'if'語句中使用[isNaN()](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/isNaN)函數,或者設置一個類'clickable '在數字單元格上並使用jQuery的'hasClass()'(https://learn.jquery.com/using-jquery-core/faq/how-do-i-test-whether-an-element-has-a-特定類/)來確保你只在具有這個'clickable'標誌類的單元上執行'parseInt()'。有一個[SO問題](https://stackoverflow.com/questions/18082/validate-decimal-numbers-in-javascript-isnumeric)關於如何安全地確定一個字符串是否是數字。 –

+0

順便說一下,在你的桌面上,請關閉正確的標籤,每當你寫上' Titanum'(打開'th'-tag並關閉'td'-tag)之類的東西時,小貓就會死亡某處 –