如何在我在表格中输入值时立即更新总数?

huangapple go评论105阅读模式
英文:

How to update the total number immediately when i put the value in the table

问题

I have translated the code for you as requested. Here is the translated code:

  1. <!-- 开始代码片段: js 隐藏: false 控制台: false Babel: false -->
  2. <!-- 语言: lang-js -->
  3. function calculateTotal() {
  4. let rows = document.querySelectorAll("tbody tr");
  5. let grandTotal = 0;
  6. let negative = false;
  7. for (let i = 0; i < rows.length; i++) {
  8. let row = rows[i];
  9. let quantityInput = row.querySelector(".quantity input");
  10. let priceInput = row.querySelector(".price input");
  11. let totalInput = row.querySelector(".total input");
  12. let quantity = parseInt(quantityInput.value);
  13. let price = parseFloat(priceInput.value).toFixed(2);
  14. if (quantity < 0 || price < 0) {
  15. negative = true;
  16. quantity = 0;
  17. price = "0.00";
  18. quantityInput.value = "0";
  19. priceInput.value = "0.00";
  20. }
  21. let total = quantity * price;
  22. totalInput.value = total.toFixed(2);
  23. grandTotal += total;
  24. }
  25. document.querySelector(".GrandTotal").value = grandTotal.toFixed(2);
  26. if (negative) {
  27. alert("不允许负值!");
  28. }
  29. }
  30. <!-- 语言: lang-css -->
  31. table, td {
  32. padding: 0.5rem;
  33. border: 3px solid;
  34. border-collapse: collapse;
  35. }
  36. h1 {
  37. font-family: 'Ubuntu', cursive;
  38. }
  39. th {
  40. background-color: skyblue;
  41. font-weight: bold;
  42. padding: 0.5rem;
  43. border: 3px solid;
  44. border-collapse: collapse;
  45. }
  46. tbody {
  47. background-color: white;
  48. }
  49. .No {
  50. text-align: right;
  51. }
  52. td:nth-child(7) input[type="number"] {
  53. text-align: right;
  54. background-color: silver;
  55. }
  56. td:nth-child(6) input[type="number"] {
  57. text-align: right;
  58. }
  59. td:nth-child(5) input[type="number"] {
  60. text-align: right;
  61. }
  62. tfoot tr td:last-child input[type="number"] {
  63. text-align: right;
  64. }
  65. input::-webkit-outer-spin-button,
  66. input::-webkit-inner-spin-button {
  67. -webkit-appearance: none;
  68. margin: 0;
  69. }
  70. tfoot {
  71. font-weight: bold;
  72. }
  73. .Button {
  74. float: right;
  75. }
  76. .GrandTotal {
  77. background-color: silver;
  78. font-size: 18pt;
  79. float: right;
  80. }
  81. tr:hover {
  82. background-color: yellow;
  83. }
  84. .background-colour {
  85. background-color: skyblue;
  86. }
  87. body {
  88. background-color: lemonchiffon;
  89. }
  90. <!-- 语言: lang-html -->
  91. <!DOCTYPE html>
  92. <html lang="en">
  93. <head>
  94. <meta charset="UTF-8">
  95. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  96. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  97. <title>图书订购系统</title>
  98. <link rel="stylesheet" href="CSS/book-order.css">
  99. <script src="book-order.js"></script>
  100. </head>
  101. <body>
  102. <h1>图书订购系统</h1>
  103. <table id="myTable">
  104. <thead>
  105. <tr>
  106. <th>编号</th>
  107. <th>书名</th>
  108. <th>作者</th>
  109. <th>类别</th>
  110. <th>单价</th>
  111. <th>数量</th>
  112. <th>总计</th>
  113. </tr>
  114. </thead>
  115. <tbody>
  116. <tr>
  117. <td class="No">1</td>
  118. <!-- 书名 -->
  119. <td><input type="text" value=""></td>
  120. <!-- 作者 -->
  121. <td><input type="text" value=""></td>
  122. <!-- 类别 -->
  123. <td>
  124. <select>
  125. <option value="请选择类别..." disabled selected>请选择类别...</option>
  126. <option value="商业">商业</option>
  127. <option value="小说">小说</option>
  128. <option value="数学">数学</option>
  129. <option value="技术">技术</option>
  130. </select>
  131. </td>
  132. <!-- 单价 -->
  133. <td class="price"><input type="number" value="0.00"></td>
  134. <!-- 数量 -->
  135. <td class="quantity"><input type="number" value="0"></td>
  136. <!-- 总计 -->
  137. <td class="total"><input type="number" value="0.00" disabled></td>
  138. </tr>
  139. <tr>
  140. <td class="No">2</td>
  141. <!-- 书名 -->
  142. <td><input type="text" value=""></td>
  143. <!-- 作者 -->
  144. <td><input type="text" value=""></td>
  145. <!-- 类别 -->
  146. <td>
  147. <select>
  148. <option value="请选择类别..." disabled selected>请选择类别...</option>
  149. <option value="商业">商业</option>
  150. <option value="小说">小说</option>
  151. <option value="数学">数学</option>
  152. <option value="技术">技术</option>
  153. </select>
  154. </td>
  155. <!-- 单价 -->
  156. <td class="price"><input type="number" value="0.00"></td>
  157. <!-- 数量 -->
  158. <td class="quantity"><input type="number" value="0"></td>
  159. <!-- 总计 -->
  160. <td class="total"><input type="number" value="0.00" disabled></td>
  161. </tr>
  162. <tr>
  163. <td class="No">3</td>
  164. <!-- 书名 -->
  165. <td><input type="text" value=""></td>
  166. <!-- 作者 -->
  167. <td><input type="text" value=""></td>
  168. <!-- 类别 -->
  169. <td>
  170. <select>
  171. <option value="请选择类别..." disabled selected>请选择类别...</option>
  172. <option value="商业">商业</option>
  173. <option value="小说">小说</option>
  174. <option value="数学">数学</option>
  175. <option value="技术">技术</option>
  176. </select>
  177. </td>
  178. <!-- 单价 -->
  179. <td class="price"><input type="number" value="0.00"></td>
  180. <!-- 数量 -->
  181. <td class="quantity"><input type="number" value="0"></td>
  182. <!-- 总计 -->
  183. <td class="total"><input type="number" value="0.00" disabled></td>
  184. </tr>
  185. <tr>
  186. <td class="No">4</td>
  187. <!-- 书名 -->
  188. <td><input type="text" value=""></td>
  189. <!-- 作者 -->
  190. <td><input type="text" value=""></td>
  191. <!-- 类别 -->
  192. <td>
  193. <select>
  194. <option value="请选择类别..." disabled
  195. <details>
  196. <summary>英文:</summary>
  197. &lt;!-- begin snippet: js hide: false console: false babel: false --&gt;
  198. &lt;!-- language: lang-js --&gt;
  199. function calculateTotal() {
  200. let rows = document.querySelectorAll(&quot;tbody tr&quot;);
  201. let grandTotal = 0;
  202. let negative = false;
  203. for (let i = 0; i &lt; rows.length; i++) {
  204. let row = rows[i];
  205. let quantityInput = row.querySelector(&quot;.quantity input&quot;);
  206. let priceInput = row.querySelector(&quot;.price input&quot;);
  207. let totalInput = row.querySelector(&quot;.total input&quot;);
  208. let quantity = parseInt(quantityInput.value);
  209. let price = parseFloat(priceInput.value).toFixed(2);
  210. if(quantity &lt; 0 || price &lt; 0){
  211. negative = true;
  212. quantity = 0;
  213. price = 0.00;
  214. quantityInput.value = &quot;0&quot;;
  215. priceInput.value = &quot;0.00&quot;;
  216. }
  217. let total = quantity * price;
  218. totalInput.value = total.toFixed(2);
  219. grandTotal += total;
  220. }
  221. document.querySelector(&quot;.GrandTotal&quot;).value = grandTotal.toFixed(2);
  222. if(negative){
  223. alert(&quot;No Negative Values!&quot;)
  224. }
  225. }
  226. &lt;!-- language: lang-css --&gt;
  227. table,td {
  228. padding: 0.5rem;
  229. border: 3px solid;
  230. border-collapse:collapse;
  231. }
  232. h1 {
  233. font-family: &#39;Ubuntu&#39;, cursive;
  234. }
  235. th {
  236. background-color: skyblue;
  237. font-weight: bold;
  238. padding: 0.5rem;
  239. border: 3px solid;
  240. border-collapse:collapse;
  241. }
  242. tbody {
  243. background-color: white;
  244. }
  245. .No {
  246. text-align: right;
  247. }
  248. td:nth-child(7) input[type=&quot;number&quot;]{
  249. text-align: right; background-color: silver;
  250. }
  251. td:nth-child(6) input[type=&quot;number&quot;]{
  252. text-align: right;
  253. }
  254. td:nth-child(5) input[type=&quot;number&quot;]{
  255. text-align: right;
  256. }
  257. tfoot tr td:last-child input[type=&quot;number&quot;]{
  258. text-align: right;
  259. }
  260. input::-webkit-outer-spin-button,
  261. input::-webkit-inner-spin-button {
  262. -webkit-appearance: none;
  263. margin: 0;
  264. }
  265. tfoot {
  266. font-weight: bold;
  267. }
  268. .Button {
  269. float:right;
  270. }
  271. .GrandTotal {
  272. background-color: silver;
  273. font-size: 18pt;
  274. float:right;
  275. }
  276. tr:hover {
  277. background-color: yellow;
  278. }
  279. .background-colour {
  280. background-color: skyblue;
  281. }
  282. body {
  283. background-color: lemonchiffon;
  284. }
  285. &lt;!-- language: lang-html --&gt;
  286. &lt;!DOCTYPE html&gt;
  287. &lt;html lang=&quot;en&quot;&gt;
  288. &lt;head&gt;
  289. &lt;meta charset=&quot;UTF-8&quot;&gt;
  290. &lt;meta http-equiv=&quot;X-UA-Compatible&quot; content=&quot;IE=edge&quot;&gt;
  291. &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;
  292. &lt;title&gt;Book Ordering System&lt;/title&gt;
  293. &lt;link rel=&quot;stylesheet&quot; href=&quot;CSS/book-order.css&quot;&gt;
  294. &lt;script src=&quot;book-order.js&quot;&gt;&lt;/script&gt;
  295. &lt;/head&gt;
  296. &lt;body&gt;
  297. &lt;h1&gt;Book Ordering System&lt;/h1&gt;
  298. &lt;table id=&quot;myTable&quot;&gt;
  299. &lt;thead&gt;
  300. &lt;tr&gt;
  301. &lt;th&gt;No.&lt;/th&gt;
  302. &lt;th&gt;Book Title&lt;/th&gt;
  303. &lt;th&gt;Author&lt;/th&gt;
  304. &lt;th&gt;Category&lt;/th&gt;
  305. &lt;th&gt;Unit Price&lt;/th&gt;
  306. &lt;th&gt;Quantity&lt;/th&gt;
  307. &lt;th&gt;Total&lt;/th&gt;
  308. &lt;/tr&gt;
  309. &lt;/thead&gt;
  310. &lt;tbody&gt;
  311. &lt;tr&gt;
  312. &lt;td class=&quot;No&quot;&gt;1&lt;/td&gt;
  313. &lt;!--Book Title--&gt;
  314. &lt;td&gt;&lt;input type=&quot;text&quot; value=&quot;&quot;&gt;&lt;/td&gt;
  315. &lt;!--Author--&gt;
  316. &lt;td&gt;&lt;input type=&quot;text&quot; value=&quot;&quot;&gt;&lt;/td&gt;
  317. &lt;!--Category--&gt;
  318. &lt;td&gt;
  319. &lt;select&gt;
  320. &lt;option value=&quot;Please choose the category...&quot; disabled selected&gt;Please choose the category...&lt;/option&gt;
  321. &lt;option value=&quot;Business&quot;&gt;Business&lt;/option&gt;
  322. &lt;option value=&quot;Fiction&quot;&gt;Fiction&lt;/option&gt;
  323. &lt;option value=&quot;Mathematics&quot;&gt;Mathematics&lt;/option&gt;
  324. &lt;option value=&quot;Technology&quot;&gt;Technology&lt;/option&gt;
  325. &lt;/select&gt;
  326. &lt;/td&gt;
  327. &lt;!--Unit Price--&gt;
  328. &lt;td class=&quot;price&quot;&gt;&lt;input type=&quot;number&quot; value=&quot;0.00&quot;&gt;&lt;/td&gt;
  329. &lt;!--Quantity--&gt;
  330. &lt;td class=&quot;quantity&quot;&gt;&lt;input type=&quot;number&quot; value=&quot;0&quot;&gt;&lt;/td&gt;
  331. &lt;!--Total--&gt;
  332. &lt;td class=&quot;total&quot;&gt;&lt;input type=&quot;number&quot; value=&quot;0.00&quot; disabled&gt;&lt;/td&gt;
  333. &lt;/tr&gt;
  334. &lt;tr&gt;
  335. &lt;td class=&quot;No&quot;&gt;2&lt;/td&gt;
  336. &lt;!--Book Title--&gt;
  337. &lt;td&gt;&lt;input type=&quot;text&quot; value=&quot;&quot;&gt;&lt;/td&gt;
  338. &lt;!--Author--&gt;
  339. &lt;td&gt;&lt;input type=&quot;text&quot; value=&quot;&quot;&gt;&lt;/td&gt;
  340. &lt;!--Category--&gt;
  341. &lt;td&gt;
  342. &lt;select&gt;
  343. &lt;option value=&quot;Please choose the category...&quot; disabled selected&gt;Please choose the category...&lt;/option&gt;
  344. &lt;option value=&quot;Business&quot;&gt;Business&lt;/option&gt;
  345. &lt;option value=&quot;Fiction&quot;&gt;Fiction&lt;/option&gt;
  346. &lt;option value=&quot;Mathematics&quot;&gt;Mathematics&lt;/option&gt;
  347. &lt;option value=&quot;Technology&quot;&gt;Technology&lt;/option&gt;
  348. &lt;/select&gt;
  349. &lt;/td&gt;
  350. &lt;!--Unit Price--&gt;
  351. &lt;td class=&quot;price&quot;&gt;&lt;input type=&quot;number&quot; value=&quot;0.00&quot;&gt;&lt;/td&gt;
  352. &lt;!--Quantity--&gt;
  353. &lt;td class=&quot;quantity&quot;&gt;&lt;input type=&quot;number&quot; value=&quot;0&quot;&gt;&lt;/td&gt;
  354. &lt;!--Total--&gt;
  355. &lt;td class=&quot;total&quot;&gt;&lt;input type=&quot;number&quot; value=&quot;0.00&quot; disabled&gt;&lt;/td&gt;
  356. &lt;/tr&gt;
  357. &lt;tr&gt;
  358. &lt;td class=&quot;No&quot;&gt;3&lt;/td&gt;
  359. &lt;!--Book Title--&gt;
  360. &lt;td&gt;&lt;input type=&quot;text&quot; value=&quot;&quot;&gt;&lt;/td&gt;
  361. &lt;!--Author--&gt;
  362. &lt;td&gt;&lt;input type=&quot;text&quot; value=&quot;&quot;&gt;&lt;/td&gt;
  363. &lt;!--Category--&gt;
  364. &lt;td&gt;
  365. &lt;select&gt;
  366. &lt;option value=&quot;Please choose the category...&quot; disabled selected&gt;Please choose the category...&lt;/option&gt;
  367. &lt;option value=&quot;Business&quot;&gt;Business&lt;/option&gt;
  368. &lt;option value=&quot;Fiction&quot;&gt;Fiction&lt;/option&gt;
  369. &lt;option value=&quot;Mathematics&quot;&gt;Mathematics&lt;/option&gt;
  370. &lt;option value=&quot;Technology&quot;&gt;Technology&lt;/option&gt;
  371. &lt;/select&gt;
  372. &lt;/td&gt;
  373. &lt;!--Unit Price--&gt;
  374. &lt;td class=&quot;price&quot;&gt;&lt;input type=&quot;number&quot; value=&quot;0.00&quot;&gt;&lt;/td&gt;
  375. &lt;!--Quantity--&gt;
  376. &lt;td class=&quot;quantity&quot;&gt;&lt;input type=&quot;number&quot; value=&quot;0&quot;&gt;&lt;/td&gt;
  377. &lt;!--Total--&gt;
  378. &lt;td class=&quot;total&quot;&gt;&lt;input type=&quot;number&quot; value=&quot;0.00&quot; disabled&gt;&lt;/td&gt;
  379. &lt;/tr&gt;
  380. &lt;tr&gt;
  381. &lt;td class=&quot;No&quot;&gt;4&lt;/td&gt;
  382. &lt;!--Book Title--&gt;
  383. &lt;td&gt;&lt;input type=&quot;text&quot; value=&quot;&quot;&gt;&lt;/td&gt;
  384. &lt;!--Author--&gt;
  385. &lt;td&gt;&lt;input type=&quot;text&quot; value=&quot;&quot;&gt;&lt;/td&gt;
  386. &lt;!--Category--&gt;
  387. &lt;td&gt;
  388. &lt;select&gt;
  389. &lt;option value=&quot;Please choose the category...&quot; disabled selected&gt;Please choose the category...&lt;/option&gt;
  390. &lt;option value=&quot;Business&quot;&gt;Business&lt;/option&gt;
  391. &lt;option value=&quot;Fiction&quot;&gt;Fiction&lt;/option&gt;
  392. &lt;option value=&quot;Mathematics&quot;&gt;Mathematics&lt;/option&gt;
  393. &lt;option value=&quot;Technology&quot;&gt;Technology&lt;/option&gt;
  394. &lt;/select&gt;
  395. &lt;/td&gt;
  396. &lt;!--Unit Price--&gt;
  397. &lt;td class=&quot;price&quot;&gt;&lt;input type=&quot;number&quot; value=&quot;0.00&quot;&gt;&lt;/td&gt;
  398. &lt;!--Quantity--&gt;
  399. &lt;td class=&quot;quantity&quot;&gt;&lt;input type=&quot;number&quot; value=&quot;0&quot;&gt;&lt;/td&gt;
  400. &lt;!--Total--&gt;
  401. &lt;td class=&quot;total&quot;&gt;&lt;input type=&quot;number&quot; value=&quot;0.00&quot; disabled&gt;&lt;/td&gt;
  402. &lt;/tr&gt;
  403. &lt;tr&gt;
  404. &lt;td class=&quot;No&quot;&gt;5&lt;/td&gt;
  405. &lt;!--Book Title--&gt;
  406. &lt;td&gt;&lt;input type=&quot;text&quot; value=&quot;&quot;&gt;&lt;/td&gt;
  407. &lt;!--Author--&gt;
  408. &lt;td&gt;&lt;input type=&quot;text&quot; value=&quot;&quot;&gt;&lt;/td&gt;
  409. &lt;!--Category--&gt;
  410. &lt;td&gt;
  411. &lt;select&gt;
  412. &lt;option value=&quot;Please choose the category...&quot; disabled selected&gt;Please choose the category...&lt;/option&gt;
  413. &lt;option value=&quot;Business&quot;&gt;Business&lt;/option&gt;
  414. &lt;option value=&quot;Fiction&quot;&gt;Fiction&lt;/option&gt;
  415. &lt;option value=&quot;Mathematics&quot;&gt;Mathematics&lt;/option&gt;
  416. &lt;option value=&quot;Technology&quot;&gt;Technology&lt;/option&gt;
  417. &lt;/select&gt;
  418. &lt;/td&gt;
  419. &lt;!--Unit Price--&gt;
  420. &lt;td class=&quot;price&quot;&gt;&lt;input type=&quot;number&quot; value=&quot;0.00&quot;&gt;&lt;/td&gt;
  421. &lt;!--Quantity--&gt;
  422. &lt;td class=&quot;quantity&quot;&gt;&lt;input type=&quot;number&quot; value=&quot;0&quot;&gt;&lt;/td&gt;
  423. &lt;!--Total--&gt;
  424. &lt;td class=&quot;total&quot;&gt;&lt;input type=&quot;number&quot; value=&quot;0.00&quot; disabled&gt;&lt;/td&gt;
  425. &lt;/tr&gt;
  426. &lt;/tbody&gt;
  427. &lt;tfoot&gt;
  428. &lt;tr&gt;
  429. &lt;td class=&quot;background-colour&quot; colspan=&quot;5&quot;&gt;
  430. &lt;button type=&quot;button&quot; onclick=&quot;calculateTotal()&quot; class=&quot;Button&quot;&gt;Calculate Grand Total Price&lt;/button&gt;
  431. &lt;/td&gt;
  432. &lt;td class=&quot;background-colour&quot; colspan=&quot;2&quot;&gt;
  433. &lt;input type=&quot;number&quot; name=&quot;Grand Total Price&quot; value=&quot;0.00&quot; class=&quot;GrandTotal&quot; disabled&gt;
  434. &lt;/td&gt;
  435. &lt;/tr&gt;
  436. &lt;/tfoot&gt;
  437. &lt;/table&gt;
  438. &lt;/body&gt;
  439. &lt;/html&gt;
  440. &lt;!-- end snippet --&gt;
  441. I am trying to update the total value in the table immediately right after I input the value in unit price and quantity without clicking the button. The purpose of the &quot;Calculate Grand Total Price&quot; button is suppose to sum all of the total and display it in &quot;GrandTotal&quot; input field only.
  442. This is my HTML code:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Book Ordering System</title>
<link rel="stylesheet" href="CSS/book-order.css">
<script src="book-order.js"></script>
</head>
<body>
<h1>Book Ordering System</h1>

  1. &lt;table id=&quot;myTable&quot;&gt;
  2. &lt;thead&gt;
  3. &lt;tr&gt;
  4. &lt;th&gt;No.&lt;/th&gt;
  5. &lt;th&gt;Book Title&lt;/th&gt;
  6. &lt;th&gt;Author&lt;/th&gt;
  7. &lt;th&gt;Category&lt;/th&gt;
  8. &lt;th&gt;Unit Price&lt;/th&gt;
  9. &lt;th&gt;Quantity&lt;/th&gt;
  10. &lt;th&gt;Total&lt;/th&gt;
  11. &lt;/tr&gt;
  12. &lt;/thead&gt;
  13. &lt;tbody&gt;
  14. &lt;tr&gt;
  15. &lt;td class=&quot;No&quot;&gt;1&lt;/td&gt;
  16. &lt;!--Book Title--&gt;
  17. &lt;td&gt;&lt;input type=&quot;text&quot; value=&quot;&quot;&gt;&lt;/td&gt;
  18. &lt;!--Author--&gt;
  19. &lt;td&gt;&lt;input type=&quot;text&quot; value=&quot;&quot;&gt;&lt;/td&gt;
  20. &lt;!--Category--&gt;
  21. &lt;td&gt;
  22. &lt;select&gt;
  23. &lt;option value=&quot;Please choose the category...&quot; disabled selected&gt;Please choose the category...&lt;/option&gt;
  24. &lt;option value=&quot;Business&quot;&gt;Business&lt;/option&gt;
  25. &lt;option value=&quot;Fiction&quot;&gt;Fiction&lt;/option&gt;
  26. &lt;option value=&quot;Mathematics&quot;&gt;Mathematics&lt;/option&gt;
  27. &lt;option value=&quot;Technology&quot;&gt;Technology&lt;/option&gt;
  28. &lt;/select&gt;
  29. &lt;/td&gt;
  30. &lt;!--Unit Price--&gt;
  31. &lt;td class=&quot;price&quot;&gt;&lt;input type=&quot;number&quot; value=&quot;0.00&quot;&gt;&lt;/td&gt;
  32. &lt;!--Quantity--&gt;
  33. &lt;td class=&quot;quantity&quot;&gt;&lt;input type=&quot;number&quot; value=&quot;0&quot;&gt;&lt;/td&gt;
  34. &lt;!--Total--&gt;
  35. &lt;td class=&quot;total&quot;&gt;&lt;input type=&quot;number&quot; value=&quot;0.00&quot; disabled&gt;&lt;/td&gt;
  36. &lt;/tr&gt;
  37. &lt;tr&gt;
  38. &lt;td class=&quot;No&quot;&gt;2&lt;/td&gt;
  39. &lt;!--Book Title--&gt;
  40. &lt;td&gt;&lt;input type=&quot;text&quot; value=&quot;&quot;&gt;&lt;/td&gt;
  41. &lt;!--Author--&gt;
  42. &lt;td&gt;&lt;input type=&quot;text&quot; value=&quot;&quot;&gt;&lt;/td&gt;
  43. &lt;!--Category--&gt;
  44. &lt;td&gt;
  45. &lt;select&gt;
  46. &lt;option value=&quot;Please choose the category...&quot; disabled selected&gt;Please choose the category...&lt;/option&gt;
  47. &lt;option value=&quot;Business&quot;&gt;Business&lt;/option&gt;
  48. &lt;option value=&quot;Fiction&quot;&gt;Fiction&lt;/option&gt;
  49. &lt;option value=&quot;Mathematics&quot;&gt;Mathematics&lt;/option&gt;
  50. &lt;option value=&quot;Technology&quot;&gt;Technology&lt;/option&gt;
  51. &lt;/select&gt;
  52. &lt;/td&gt;
  53. &lt;!--Unit Price--&gt;
  54. &lt;td class=&quot;price&quot;&gt;&lt;input type=&quot;number&quot; value=&quot;0.00&quot;&gt;&lt;/td&gt;
  55. &lt;!--Quantity--&gt;
  56. &lt;td class=&quot;quantity&quot;&gt;&lt;input type=&quot;number&quot; value=&quot;0&quot;&gt;&lt;/td&gt;
  57. &lt;!--Total--&gt;
  58. &lt;td class=&quot;total&quot;&gt;&lt;input type=&quot;number&quot; value=&quot;0.00&quot; disabled&gt;&lt;/td&gt;
  59. &lt;/tr&gt;
  60. &lt;tr&gt;
  61. &lt;td class=&quot;No&quot;&gt;3&lt;/td&gt;
  62. &lt;!--Book Title--&gt;
  63. &lt;td&gt;&lt;input type=&quot;text&quot; value=&quot;&quot;&gt;&lt;/td&gt;
  64. &lt;!--Author--&gt;
  65. &lt;td&gt;&lt;input type=&quot;text&quot; value=&quot;&quot;&gt;&lt;/td&gt;
  66. &lt;!--Category--&gt;
  67. &lt;td&gt;
  68. &lt;select&gt;
  69. &lt;option value=&quot;Please choose the category...&quot; disabled selected&gt;Please choose the category...&lt;/option&gt;
  70. &lt;option value=&quot;Business&quot;&gt;Business&lt;/option&gt;
  71. &lt;option value=&quot;Fiction&quot;&gt;Fiction&lt;/option&gt;
  72. &lt;option value=&quot;Mathematics&quot;&gt;Mathematics&lt;/option&gt;
  73. &lt;option value=&quot;Technology&quot;&gt;Technology&lt;/option&gt;
  74. &lt;/select&gt;
  75. &lt;/td&gt;
  76. &lt;!--Unit Price--&gt;
  77. &lt;td class=&quot;price&quot;&gt;&lt;input type=&quot;number&quot; value=&quot;0.00&quot;&gt;&lt;/td&gt;
  78. &lt;!--Quantity--&gt;
  79. &lt;td class=&quot;quantity&quot;&gt;&lt;input type=&quot;number&quot; value=&quot;0&quot;&gt;&lt;/td&gt;
  80. &lt;!--Total--&gt;
  81. &lt;td class=&quot;total&quot;&gt;&lt;input type=&quot;number&quot; value=&quot;0.00&quot; disabled&gt;&lt;/td&gt;
  82. &lt;/tr&gt;
  83. &lt;tr&gt;
  84. &lt;td class=&quot;No&quot;&gt;4&lt;/td&gt;
  85. &lt;!--Book Title--&gt;
  86. &lt;td&gt;&lt;input type=&quot;text&quot; value=&quot;&quot;&gt;&lt;/td&gt;
  87. &lt;!--Author--&gt;
  88. &lt;td&gt;&lt;input type=&quot;text&quot; value=&quot;&quot;&gt;&lt;/td&gt;
  89. &lt;!--Category--&gt;
  90. &lt;td&gt;
  91. &lt;select&gt;
  92. &lt;option value=&quot;Please choose the category...&quot; disabled selected&gt;Please choose the category...&lt;/option&gt;
  93. &lt;option value=&quot;Business&quot;&gt;Business&lt;/option&gt;
  94. &lt;option value=&quot;Fiction&quot;&gt;Fiction&lt;/option&gt;
  95. &lt;option value=&quot;Mathematics&quot;&gt;Mathematics&lt;/option&gt;
  96. &lt;option value=&quot;Technology&quot;&gt;Technology&lt;/option&gt;
  97. &lt;/select&gt;
  98. &lt;/td&gt;
  99. &lt;!--Unit Price--&gt;
  100. &lt;td class=&quot;price&quot;&gt;&lt;input type=&quot;number&quot; value=&quot;0.00&quot;&gt;&lt;/td&gt;
  101. &lt;!--Quantity--&gt;
  102. &lt;td class=&quot;quantity&quot;&gt;&lt;input type=&quot;number&quot; value=&quot;0&quot;&gt;&lt;/td&gt;
  103. &lt;!--Total--&gt;
  104. &lt;td class=&quot;total&quot;&gt;&lt;input type=&quot;number&quot; value=&quot;0.00&quot; disabled&gt;&lt;/td&gt;
  105. &lt;/tr&gt;
  106. &lt;tr&gt;
  107. &lt;td class=&quot;No&quot;&gt;5&lt;/td&gt;
  108. &lt;!--Book Title--&gt;
  109. &lt;td&gt;&lt;input type=&quot;text&quot; value=&quot;&quot;&gt;&lt;/td&gt;
  110. &lt;!--Author--&gt;
  111. &lt;td&gt;&lt;input type=&quot;text&quot; value=&quot;&quot;&gt;&lt;/td&gt;
  112. &lt;!--Category--&gt;
  113. &lt;td&gt;
  114. &lt;select&gt;
  115. &lt;option value=&quot;Please choose the category...&quot; disabled selected&gt;Please choose the category...&lt;/option&gt;
  116. &lt;option value=&quot;Business&quot;&gt;Business&lt;/option&gt;
  117. &lt;option value=&quot;Fiction&quot;&gt;Fiction&lt;/option&gt;
  118. &lt;option value=&quot;Mathematics&quot;&gt;Mathematics&lt;/option&gt;
  119. &lt;option value=&quot;Technology&quot;&gt;Technology&lt;/option&gt;
  120. &lt;/select&gt;
  121. &lt;/td&gt;
  122. &lt;!--Unit Price--&gt;
  123. &lt;td class=&quot;price&quot;&gt;&lt;input type=&quot;number&quot; value=&quot;0.00&quot;&gt;&lt;/td&gt;
  124. &lt;!--Quantity--&gt;
  125. &lt;td class=&quot;quantity&quot;&gt;&lt;input type=&quot;number&quot; value=&quot;0&quot;&gt;&lt;/td&gt;
  126. &lt;!--Total--&gt;
  127. &lt;td class=&quot;total&quot;&gt;&lt;input type=&quot;number&quot; value=&quot;0.00&quot; disabled&gt;&lt;/td&gt;
  128. &lt;/tr&gt;
  129. &lt;/tbody&gt;
  130. &lt;tfoot&gt;
  131. &lt;tr&gt;
  132. &lt;td class=&quot;background-colour&quot; colspan=&quot;5&quot;&gt;
  133. &lt;button type=&quot;button&quot; onclick=&quot;calculateTotal()&quot; class=&quot;Button&quot;&gt;Calculate Grand Total Price&lt;/button&gt;
  134. &lt;/td&gt;
  135. &lt;td class=&quot;background-colour&quot; colspan=&quot;2&quot;&gt;
  136. &lt;input type=&quot;number&quot; name=&quot;Grand Total Price&quot; value=&quot;0.00&quot; class=&quot;GrandTotal&quot; disabled&gt;
  137. &lt;/td&gt;
  138. &lt;/tr&gt;
  139. &lt;/tfoot&gt;
  140. &lt;/table&gt;

</body>
</html>

  1. This is my CSS code:

table,td {
padding: 0.5rem;
border: 3px solid;
border-collapse:collapse;
}

h1 {
font-family: 'Ubuntu', cursive;
}

th {
background-color: skyblue;
font-weight: bold;
padding: 0.5rem;
border: 3px solid;
border-collapse:collapse;
}

tbody {
background-color: white;
}

.No {
text-align: right;
}

td:nth-child(7) input[type="number"]{
text-align: right; background-color: silver;
}

td:nth-child(6) input[type="number"]{
text-align: right;
}

td:nth-child(5) input[type="number"]{
text-align: right;
}

tfoot tr td:last-child input[type="number"]{
text-align: right;
}

input::-webkit-outer-spin-button,
input::-webkit-inner-spin-button {
-webkit-appearance: none;
margin: 0;
}

tfoot {
font-weight: bold;
}

.Button {
float:right;
}

.GrandTotal {
background-color: silver;
font-size: 18pt;
float:right;
}

tr:hover {
background-color: yellow;
}

.background-colour {
background-color: skyblue;
}

body {
background-color: lemonchiffon;
}

  1. This is my Javascript :

function calculateTotal() {
let rows = document.querySelectorAll("tbody tr");
let grandTotal = 0;
let negative = false;

for (let i = 0; i < rows.length; i++) {
let row = rows[i];

  1. let quantityInput = row.querySelector(&quot;.quantity input&quot;);
  2. let priceInput = row.querySelector(&quot;.price input&quot;);
  3. let totalInput = row.querySelector(&quot;.total input&quot;);
  4. let quantity = parseInt(quantityInput.value);
  5. let price = parseFloat(priceInput.value).toFixed(2);
  6. if(quantity &lt; 0 || price &lt; 0){
  7. negative = true;
  8. quantity = 0;
  9. price = 0.00;
  10. quantityInput.value = &quot;0&quot;;
  11. priceInput.value = &quot;0.00&quot;;
  12. }
  13. let total = quantity * price;
  14. totalInput.value = total.toFixed(2);
  15. grandTotal += total;

}

document.querySelector(".GrandTotal").value = grandTotal.toFixed(2);

if(negative){
alert("No Negative Values!")
}
}

  1. </details>
  2. # 答案1
  3. **得分**: 1
  4. 以下是您要翻译的内容:
  5. ```html
  6. <h1>图书订购系统</h1>
  7. <table id="myTable">
  8. <thead>
  9. <tr>
  10. <th>编号</th>
  11. <th>图书标题</th>
  12. <th>作者</th>
  13. <th>类别</th>
  14. <th>单价</th>
  15. <th>数量</th>
  16. <th>总计</th>
  17. </tr>
  18. </thead>
  19. <tbody>
  20. <tr>
  21. <td class="No">1</td>
  22. <!--图书标题-->
  23. <td><input type="text" value=""></td>
  24. <!--作者-->
  25. <td><input type="text" value=""></td>
  26. <!--类别-->
  27. <td>
  28. <select>
  29. <option value="请选择类别..." disabled selected>请选择类别...</option>
  30. <option value="商业">商业</option>
  31. <option value="小说">小说</option>
  32. <option value="数学">数学</option>
  33. <option value="技术">技术</option>
  34. </select>
  35. </td>
  36. <!--单价-->
  37. <td class="price"><input type="number" value="0.00"></td>
  38. <!--数量-->
  39. <td class="quantity"><input type="number" value="0"></td>
  40. <!--总计-->
  41. <td class="total"><input type="number" value="0.00" disabled></td>
  42. </tr>
  43. <tr>
  44. <td class="No">2</td>
  45. <!--图书标题-->
  46. <td><input type="text" value=""></td>
  47. <!--作者-->
  48. <td><input type="text" value=""></td>
  49. <!--类别-->
  50. <td>
  51. <select>
  52. <option value="请选择类别..." disabled selected>请选择类别...</option>
  53. <option value="商业">商业</option>
  54. <option value="小说">小说</option>
  55. <option value="数学">数学</option>
  56. <option value="技术">技术</option>
  57. </select>
  58. </td>
  59. <!--单价-->
  60. <td class="price"><input type="number" value="0.00"></td>
  61. <!--数量-->
  62. <td class="quantity"><input type="number" value="0"></td>
  63. <!--总计-->
  64. <td class="total"><input type="number" value="0.00" disabled></td>
  65. </tr>
  66. <tr>
  67. <td class="No">3</td>
  68. <!--图书标题-->
  69. <td><input type="text" value=""></td>
  70. <!--作者-->
  71. <td><input type="text" value=""></td>
  72. <!--类别-->
  73. <td>
  74. <select>
  75. <option value="请选择类别..." disabled selected>请选择类别...</option>
  76. <option value="商业">商业</option>
  77. <option value="小说">小说</option>
  78. <option value="数学">数学</option>
  79. <option value="技术">技术</option>
  80. </select>
  81. </td>
  82. <!--单价-->
  83. <td class="price"><input type="number" value="0.00"></td>
  84. <!--数量-->
  85. <td class="quantity"><input type="number" value="0"></td>
  86. <!--总计-->
  87. <td class="total"><input type="number" value="0.00" disabled></td>
  88. </tr>
  89. <tr>
  90. <td class="No">4</td>
  91. <!--图书标题-->
  92. <td><input type="text" value=""></td>
  93. <!--作者-->
  94. <td><input type="text" value=""></td>
  95. <!--类别-->
  96. <td>
  97. <select>
  98. <option value="请选择类别..." disabled selected>请选择类别...</option>
  99. <option value="商业">商业</option>
  100. <option value="小说">小说</option>
  101. <option value="数学">数学</option>
  102. <option value="技术">技术</option>
  103. </select>
  104. </td>
  105. <!--单价-->
  106. <td class="price"><input type="number" value="0.00"></td>
  107. <!--数量-->
  108. <td class="quantity"><input type="number" value="0"></td>
  109. <!--总计-->
  110. <td class="total"><input type="number" value="0.00" disabled></td>
  111. </tr>
  112. <tr>
  113. <td class="No">5</td>
  114. <!--图书标题-->
  115. <td><input type="text" value=""></td>
  116. <!--作者-->
  117. <td><input type="text" value=""></td>
  118. <!--类别-->
  119. <td>
  120. <select>
  121. <option value="请选择类别..." disabled selected>请选择类别...</option>
  122. <option value="商业">商业</option>
  123. <option value="小说">小说</option>
  124. <option value="数学">数学</option>
  125. <option value="技术">技术</option>
  126. </select>
  127. </td>
  128. <!--单价-->
  129. <td class="price"><input type="number" value="0.00"></td>
  130. <!--数量-->
  131. <td class="quantity"><input type="number" value="0"></td>
  132. <!--总计-->
  133. <td class="total"><input type="number" value="0.00" disabled></td>
  134. </tr>
  135. </tbody>
  136. <tfoot>
  137. <tr>
  138. <td class="background-colour" colspan="5">
  139. </td>
  140. <td class="background-colour" colspan="2">
  141. <input type="number" name="总计价格" value="0.00" class="GrandTotal" disabled>
  142. </td>
  143. </tr>
  144. </tfoot>
  145. </table>

请注意,我将"Grand Total Price"翻译为"总计价格",以便更好地适应中文环境。如果需要其他翻译或有其他问题,请告诉我。

英文:

Delegate

<!-- begin snippet: js hide: false console: true babel: false -->

<!-- language: lang-js -->

  1. window.addEventListener(&quot;DOMContentLoaded&quot;, () =&gt; { // when the page hass loaded
  2. document.getElementById(&quot;myTable&quot;).addEventListener(&quot;input&quot;, () =&gt; { // any input - you can test if it is a number field if you wish
  3. let rows = document.querySelectorAll(&quot;tbody tr&quot;);
  4. let negative = false;
  5. let grandTotal = [...rows].map(row =&gt; {
  6. let quantityInput = row.querySelector(&quot;.quantity input&quot;);
  7. let priceInput = row.querySelector(&quot;.price input&quot;);
  8. let totalInput = row.querySelector(&quot;.total input&quot;);
  9. let quantity = parseInt(quantityInput.value);
  10. let price = parseFloat(priceInput.value).toFixed(2);
  11. if (quantity &lt; 0 || price &lt; 0) {
  12. negative = true;
  13. quantity = 0;
  14. price = 0.00;
  15. quantityInput.value = &quot;0&quot;;
  16. priceInput.value = &quot;0.00&quot;;
  17. }
  18. let total = quantity * price;
  19. totalInput.value = total.toFixed(2);
  20. return total;
  21. }).reduce((a, b) =&gt; a + b)
  22. document.querySelector(&quot;.GrandTotal&quot;).value = grandTotal.toFixed(2);
  23. if (negative) {
  24. alert(&quot;No Negative Values!&quot;)
  25. }
  26. });
  27. });

<!-- language: lang-html -->

  1. &lt;h1&gt;Book Ordering System&lt;/h1&gt;
  2. &lt;table id=&quot;myTable&quot;&gt;
  3. &lt;thead&gt;
  4. &lt;tr&gt;
  5. &lt;th&gt;No.&lt;/th&gt;
  6. &lt;th&gt;Book Title&lt;/th&gt;
  7. &lt;th&gt;Author&lt;/th&gt;
  8. &lt;th&gt;Category&lt;/th&gt;
  9. &lt;th&gt;Unit Price&lt;/th&gt;
  10. &lt;th&gt;Quantity&lt;/th&gt;
  11. &lt;th&gt;Total&lt;/th&gt;
  12. &lt;/tr&gt;
  13. &lt;/thead&gt;
  14. &lt;tbody&gt;
  15. &lt;tr&gt;
  16. &lt;td class=&quot;No&quot;&gt;1&lt;/td&gt;
  17. &lt;!--Book Title--&gt;
  18. &lt;td&gt;&lt;input type=&quot;text&quot; value=&quot;&quot;&gt;&lt;/td&gt;
  19. &lt;!--Author--&gt;
  20. &lt;td&gt;&lt;input type=&quot;text&quot; value=&quot;&quot;&gt;&lt;/td&gt;
  21. &lt;!--Category--&gt;
  22. &lt;td&gt;
  23. &lt;select&gt;
  24. &lt;option value=&quot;Please choose the category...&quot; disabled selected&gt;Please choose the category...&lt;/option&gt;
  25. &lt;option value=&quot;Business&quot;&gt;Business&lt;/option&gt;
  26. &lt;option value=&quot;Fiction&quot;&gt;Fiction&lt;/option&gt;
  27. &lt;option value=&quot;Mathematics&quot;&gt;Mathematics&lt;/option&gt;
  28. &lt;option value=&quot;Technology&quot;&gt;Technology&lt;/option&gt;
  29. &lt;/select&gt;
  30. &lt;/td&gt;
  31. &lt;!--Unit Price--&gt;
  32. &lt;td class=&quot;price&quot;&gt;&lt;input type=&quot;number&quot; value=&quot;0.00&quot;&gt;&lt;/td&gt;
  33. &lt;!--Quantity--&gt;
  34. &lt;td class=&quot;quantity&quot;&gt;&lt;input type=&quot;number&quot; value=&quot;0&quot;&gt;&lt;/td&gt;
  35. &lt;!--Total--&gt;
  36. &lt;td class=&quot;total&quot;&gt;&lt;input type=&quot;number&quot; value=&quot;0.00&quot; disabled&gt;&lt;/td&gt;
  37. &lt;/tr&gt;
  38. &lt;tr&gt;
  39. &lt;td class=&quot;No&quot;&gt;2&lt;/td&gt;
  40. &lt;!--Book Title--&gt;
  41. &lt;td&gt;&lt;input type=&quot;text&quot; value=&quot;&quot;&gt;&lt;/td&gt;
  42. &lt;!--Author--&gt;
  43. &lt;td&gt;&lt;input type=&quot;text&quot; value=&quot;&quot;&gt;&lt;/td&gt;
  44. &lt;!--Category--&gt;
  45. &lt;td&gt;
  46. &lt;select&gt;
  47. &lt;option value=&quot;Please choose the category...&quot; disabled selected&gt;Please choose the category...&lt;/option&gt;
  48. &lt;option value=&quot;Business&quot;&gt;Business&lt;/option&gt;
  49. &lt;option value=&quot;Fiction&quot;&gt;Fiction&lt;/option&gt;
  50. &lt;option value=&quot;Mathematics&quot;&gt;Mathematics&lt;/option&gt;
  51. &lt;option value=&quot;Technology&quot;&gt;Technology&lt;/option&gt;
  52. &lt;/select&gt;
  53. &lt;/td&gt;
  54. &lt;!--Unit Price--&gt;
  55. &lt;td class=&quot;price&quot;&gt;&lt;input type=&quot;number&quot; value=&quot;0.00&quot;&gt;&lt;/td&gt;
  56. &lt;!--Quantity--&gt;
  57. &lt;td class=&quot;quantity&quot;&gt;&lt;input type=&quot;number&quot; value=&quot;0&quot;&gt;&lt;/td&gt;
  58. &lt;!--Total--&gt;
  59. &lt;td class=&quot;total&quot;&gt;&lt;input type=&quot;number&quot; value=&quot;0.00&quot; disabled&gt;&lt;/td&gt;
  60. &lt;/tr&gt;
  61. &lt;tr&gt;
  62. &lt;td class=&quot;No&quot;&gt;3&lt;/td&gt;
  63. &lt;!--Book Title--&gt;
  64. &lt;td&gt;&lt;input type=&quot;text&quot; value=&quot;&quot;&gt;&lt;/td&gt;
  65. &lt;!--Author--&gt;
  66. &lt;td&gt;&lt;input type=&quot;text&quot; value=&quot;&quot;&gt;&lt;/td&gt;
  67. &lt;!--Category--&gt;
  68. &lt;td&gt;
  69. &lt;select&gt;
  70. &lt;option value=&quot;Please choose the category...&quot; disabled selected&gt;Please choose the category...&lt;/option&gt;
  71. &lt;option value=&quot;Business&quot;&gt;Business&lt;/option&gt;
  72. &lt;option value=&quot;Fiction&quot;&gt;Fiction&lt;/option&gt;
  73. &lt;option value=&quot;Mathematics&quot;&gt;Mathematics&lt;/option&gt;
  74. &lt;option value=&quot;Technology&quot;&gt;Technology&lt;/option&gt;
  75. &lt;/select&gt;
  76. &lt;/td&gt;
  77. &lt;!--Unit Price--&gt;
  78. &lt;td class=&quot;price&quot;&gt;&lt;input type=&quot;number&quot; value=&quot;0.00&quot;&gt;&lt;/td&gt;
  79. &lt;!--Quantity--&gt;
  80. &lt;td class=&quot;quantity&quot;&gt;&lt;input type=&quot;number&quot; value=&quot;0&quot;&gt;&lt;/td&gt;
  81. &lt;!--Total--&gt;
  82. &lt;td class=&quot;total&quot;&gt;&lt;input type=&quot;number&quot; value=&quot;0.00&quot; disabled&gt;&lt;/td&gt;
  83. &lt;/tr&gt;
  84. &lt;tr&gt;
  85. &lt;td class=&quot;No&quot;&gt;4&lt;/td&gt;
  86. &lt;!--Book Title--&gt;
  87. &lt;td&gt;&lt;input type=&quot;text&quot; value=&quot;&quot;&gt;&lt;/td&gt;
  88. &lt;!--Author--&gt;
  89. &lt;td&gt;&lt;input type=&quot;text&quot; value=&quot;&quot;&gt;&lt;/td&gt;
  90. &lt;!--Category--&gt;
  91. &lt;td&gt;
  92. &lt;select&gt;
  93. &lt;option value=&quot;Please choose the category...&quot; disabled selected&gt;Please choose the category...&lt;/option&gt;
  94. &lt;option value=&quot;Business&quot;&gt;Business&lt;/option&gt;
  95. &lt;option value=&quot;Fiction&quot;&gt;Fiction&lt;/option&gt;
  96. &lt;option value=&quot;Mathematics&quot;&gt;Mathematics&lt;/option&gt;
  97. &lt;option value=&quot;Technology&quot;&gt;Technology&lt;/option&gt;
  98. &lt;/select&gt;
  99. &lt;/td&gt;
  100. &lt;!--Unit Price--&gt;
  101. &lt;td class=&quot;price&quot;&gt;&lt;input type=&quot;number&quot; value=&quot;0.00&quot;&gt;&lt;/td&gt;
  102. &lt;!--Quantity--&gt;
  103. &lt;td class=&quot;quantity&quot;&gt;&lt;input type=&quot;number&quot; value=&quot;0&quot;&gt;&lt;/td&gt;
  104. &lt;!--Total--&gt;
  105. &lt;td class=&quot;total&quot;&gt;&lt;input type=&quot;number&quot; value=&quot;0.00&quot; disabled&gt;&lt;/td&gt;
  106. &lt;/tr&gt;
  107. &lt;tr&gt;
  108. &lt;td class=&quot;No&quot;&gt;5&lt;/td&gt;
  109. &lt;!--Book Title--&gt;
  110. &lt;td&gt;&lt;input type=&quot;text&quot; value=&quot;&quot;&gt;&lt;/td&gt;
  111. &lt;!--Author--&gt;
  112. &lt;td&gt;&lt;input type=&quot;text&quot; value=&quot;&quot;&gt;&lt;/td&gt;
  113. &lt;!--Category--&gt;
  114. &lt;td&gt;
  115. &lt;select&gt;
  116. &lt;option value=&quot;Please choose the category...&quot; disabled selected&gt;Please choose the category...&lt;/option&gt;
  117. &lt;option value=&quot;Business&quot;&gt;Business&lt;/option&gt;
  118. &lt;option value=&quot;Fiction&quot;&gt;Fiction&lt;/option&gt;
  119. &lt;option value=&quot;Mathematics&quot;&gt;Mathematics&lt;/option&gt;
  120. &lt;option value=&quot;Technology&quot;&gt;Technology&lt;/option&gt;
  121. &lt;/select&gt;
  122. &lt;/td&gt;
  123. &lt;!--Unit Price--&gt;
  124. &lt;td class=&quot;price&quot;&gt;&lt;input type=&quot;number&quot; value=&quot;0.00&quot;&gt;&lt;/td&gt;
  125. &lt;!--Quantity--&gt;
  126. &lt;td class=&quot;quantity&quot;&gt;&lt;input type=&quot;number&quot; value=&quot;0&quot;&gt;&lt;/td&gt;
  127. &lt;!--Total--&gt;
  128. &lt;td class=&quot;total&quot;&gt;&lt;input type=&quot;number&quot; value=&quot;0.00&quot; disabled&gt;&lt;/td&gt;
  129. &lt;/tr&gt;
  130. &lt;/tbody&gt;
  131. &lt;tfoot&gt;
  132. &lt;tr&gt;
  133. &lt;td class=&quot;background-colour&quot; colspan=&quot;5&quot;&gt;
  134. &lt;/td&gt;
  135. &lt;td class=&quot;background-colour&quot; colspan=&quot;2&quot;&gt;
  136. &lt;input type=&quot;number&quot; name=&quot;Grand Total Price&quot; value=&quot;0.00&quot; class=&quot;GrandTotal&quot; disabled&gt;
  137. &lt;/td&gt;
  138. &lt;/tr&gt;
  139. &lt;/tfoot&gt;
  140. &lt;/table&gt;

<!-- end snippet -->

答案2

得分: 0

以下是您提供的代码的翻译:

  1. 您可以在所有输入元素上添加一个事件监听器:
  2. <!-- 开始代码片段: js 隐藏: false 控制台: true Babel: false -->
  3. <!-- 语言:lang-js -->
  4. // 获取所有输入元素
  5. let inputs = document.querySelectorAll("input");
  6. let grandTotal = 0;
  7. inputs.forEach((input) => input.addEventListener('input', () => calculateTotal()))
  8. function calculateTotal() {
  9. let rows = document.querySelectorAll("tbody tr");
  10. grandTotal = 0
  11. let negative = false;
  12. for (let i = 0; i < rows.length; i++) {
  13. let row = rows[i];
  14. let quantityInput = row.querySelector(".quantity input");
  15. let priceInput = row.querySelector(".price input");
  16. let totalInput = row.querySelector(".total input");
  17. let quantity = parseInt(quantityInput.value);
  18. let price = parseFloat(priceInput.value).toFixed(2);
  19. if (quantity < 0 || price < 0) {
  20. negative = true;
  21. quantity = 0;
  22. price = 0.00;
  23. quantityInput.value = "0";
  24. priceInput.value = "0.00";
  25. }
  26. let total = quantity * price;
  27. totalInput.value = total.toFixed(2);
  28. grandTotal += total;
  29. }
  30. if (negative) {
  31. alert("不允许负值!")
  32. }
  33. }
  34. function updateGrandTotal () {
  35. document.querySelector(".GrandTotal").value = grandTotal.toFixed(2);
  36. }
  37. <!-- 语言lang-html -->
  38. <h1>图书订购系统</h1>
  39. <table id="myTable">
  40. <thead>
  41. <tr>
  42. <th>编号</th>
  43. <th>书名</th>
  44. <th>作者</th>
  45. <th>类别</th>
  46. <th>单价</th>
  47. <th>数量</th>
  48. <th>总计</th>
  49. </tr>
  50. </thead>
  51. <tbody>
  52. <tr>
  53. <td class="No">1</td>
  54. <!-- 书名 -->
  55. <td><input type="text" value=""></td>
  56. <!-- 作者 -->
  57. <td><input type="text" value=""></td>
  58. <!-- 类别 -->
  59. <td>
  60. <select>
  61. <option value="请选择类别..." disabled selected>请选择类别...</option>
  62. <option value="商业">商业</option>
  63. <option value="小说">小说</option>
  64. <option value="数学">数学</option>
  65. <option value="技术">技术</option>
  66. </select>
  67. </td>
  68. <!-- 单价 -->
  69. <td class="price"><input type="number" value="0.00"></td>
  70. <!-- 数量 -->
  71. <td class="quantity"><input type="number" value="0"></td>
  72. <!-- 总计 -->
  73. <td class="total"><input type="number" value="0.00" disabled></td>
  74. </tr>
  75. <tr>
  76. <td class="No">2</td>
  77. <!-- 书名 -->
  78. <td><input type="text" value=""></td>
  79. <!-- 作者 -->
  80. <td><input type="text" value=""></td>
  81. <!-- 类别 -->
  82. <td>
  83. <select>
  84. <option value="请选择类别..." disabled selected>请选择类别...</option>
  85. <option value="商业">商业</option>
  86. <option value="小说">小说</option>
  87. <option value="数学">数学</option>
  88. <option value="技术">技术</option>
  89. </select>
  90. </td>
  91. <!-- 单价 -->
  92. <td class="price"><input type="number" value="0.00"></td>
  93. <!-- 数量 -->
  94. <td class="quantity"><input type="number" value="0"></td>
  95. <!-- 总计 -->
  96. <td class="total"><input type="number" value="0.00" disabled></td>
  97. </tr>
  98. <tr>
  99. <td class="No">3</td>
  100. <!-- 书名 -->
  101. <td><input type="text" value=""></td>
  102. <!-- 作者 -->
  103. <td><input type="text" value=""></td>
  104. <!-- 类别 -->
  105. <td>
  106. <select>
  107. <option value="请选择类别..." disabled selected>请选择类别...</option>
  108. <option value="商业">商业</option>
  109. <option value="小说">小说</option>
  110. <option value="数学">数学</option>
  111. <option value="技术">技术</option>
  112. </select>
  113. </td>
  114. <!-- 单价 -->
  115. <td class="price"><input type="number" value="0.00"></td>
  116. <!-- 数量 -->
  117. <td class="quantity"><input type="number" value="0"></td>
  118. <!-- 总计 -->
  119. <td class="total"><input type="number" value="0.00" disabled></td>
  120. </tr>
  121. <tr>
  122. <td class="No">4</td>
  123. <!-- 书名 -->
  124. <td><input type="text" value=""></td>
  125. <!-- 作者 -->
  126. <td><input type="text" value=""></td>
  127. <!-- 类别 -->
  128. <td>
  129. <select>
  130. <option value="请选择类别..." disabled selected>请选择类别...</option>
  131. <option value="商业">商业</option>
  132. <option value="小说">小说</option>
  133. <option value="数学">数学</option>
  134. <option value="技术">技术</option>
  135. </select>
  136. </td>
  137. <!-- 单价 -->
  138. <td class="price"><input type="number" value="0.00"></td>
  139. <!-- 数量 -->
  140. <td class="quantity"><input type="number" value="0"></td>
  141. <!-- 总计 -->
  142. <td class="total"><input type="number" value="0.00" disabled></td>
  143. </tr>
  144. <tr>
  145. <td class="No">5</td>
  146. <!-- 书名 -->
  147. <td><input type="text" value=""></td>
  148. <!-- 作者 -->
  149. <td><input type="text" value=""></td>
  150. <!-- 类别 -->
  151. <td>
  152. <select>
  153. <option value="请选择类别..." disabled selected>请选择类别...</option>
  154. <option value="商业">商业</option>
  155. <option value="小说">小说</option>
  156. <option value="数学">数学</option>
  157. <option value="技术">技术</option>
  158. </select>
  159. </td>
  160. <!-- 单价 -->
  161. <td class="price"><input type="number" value="0.00"></td>
  162. <!-- 数量 -->
  163. <td class="quantity"><input type="number" value="0"></td>
  164. <details>
  165. <summary>英文:</summary>
  166. You can add an event listener on input of all your inputs elements:
  167. &lt;!-- begin snippet: js hide: false console: true babel: false --&gt;
  168. &lt;!-- language: lang-js --&gt;
  169. // Get all inputs
  170. let inputs = document.querySelectorAll(&quot;input&quot;);
  171. let grandTotal = 0;
  172. inputs.forEach((input) =&gt; input.addEventListener(&#39;input&#39;, () =&gt; calculateTotal()))
  173. function calculateTotal() {
  174. let rows = document.querySelectorAll(&quot;tbody tr&quot;);
  175. grandTotal = 0
  176. let negative = false;
  177. for (let i = 0; i &lt; rows.length; i++) {
  178. let row = rows[i];
  179. let quantityInput = row.querySelector(&quot;.quantity input&quot;);
  180. let priceInput = row.querySelector(&quot;.price input&quot;);
  181. let totalInput = row.querySelector(&quot;.total input&quot;);
  182. let quantity = parseInt(quantityInput.value);
  183. let price = parseFloat(priceInput.value).toFixed(2);
  184. if (quantity &lt; 0 || price &lt; 0) {
  185. negative = true;
  186. quantity = 0;
  187. price = 0.00;
  188. quantityInput.value = &quot;0&quot;;
  189. priceInput.value = &quot;0.00&quot;;
  190. }
  191. let total = quantity * price;
  192. totalInput.value = total.toFixed(2);
  193. grandTotal += total;
  194. }
  195. if (negative) {
  196. alert(&quot;No Negative Values!&quot;)
  197. }
  198. }
  199. function updateGrandTotal () {
  200. document.querySelector(&quot;.GrandTotal&quot;).value = grandTotal.toFixed(2);
  201. }
  202. &lt;!-- language: lang-html --&gt;
  203. &lt;h1&gt;Book Ordering System&lt;/h1&gt;
  204. &lt;table id=&quot;myTable&quot;&gt;
  205. &lt;thead&gt;
  206. &lt;tr&gt;
  207. &lt;th&gt;No.&lt;/th&gt;
  208. &lt;th&gt;Book Title&lt;/th&gt;
  209. &lt;th&gt;Author&lt;/th&gt;
  210. &lt;th&gt;Category&lt;/th&gt;
  211. &lt;th&gt;Unit Price&lt;/th&gt;
  212. &lt;th&gt;Quantity&lt;/th&gt;
  213. &lt;th&gt;Total&lt;/th&gt;
  214. &lt;/tr&gt;
  215. &lt;/thead&gt;
  216. &lt;tbody&gt;
  217. &lt;tr&gt;
  218. &lt;td class=&quot;No&quot;&gt;1&lt;/td&gt;
  219. &lt;!--Book Title--&gt;
  220. &lt;td&gt;&lt;input type=&quot;text&quot; value=&quot;&quot;&gt;&lt;/td&gt;
  221. &lt;!--Author--&gt;
  222. &lt;td&gt;&lt;input type=&quot;text&quot; value=&quot;&quot;&gt;&lt;/td&gt;
  223. &lt;!--Category--&gt;
  224. &lt;td&gt;
  225. &lt;select&gt;
  226. &lt;option value=&quot;Please choose the category...&quot; disabled selected&gt;Please choose the category...&lt;/option&gt;
  227. &lt;option value=&quot;Business&quot;&gt;Business&lt;/option&gt;
  228. &lt;option value=&quot;Fiction&quot;&gt;Fiction&lt;/option&gt;
  229. &lt;option value=&quot;Mathematics&quot;&gt;Mathematics&lt;/option&gt;
  230. &lt;option value=&quot;Technology&quot;&gt;Technology&lt;/option&gt;
  231. &lt;/select&gt;
  232. &lt;/td&gt;
  233. &lt;!--Unit Price--&gt;
  234. &lt;td class=&quot;price&quot;&gt;&lt;input type=&quot;number&quot; value=&quot;0.00&quot;&gt;&lt;/td&gt;
  235. &lt;!--Quantity--&gt;
  236. &lt;td class=&quot;quantity&quot;&gt;&lt;input type=&quot;number&quot; value=&quot;0&quot;&gt;&lt;/td&gt;
  237. &lt;!--Total--&gt;
  238. &lt;td class=&quot;total&quot;&gt;&lt;input type=&quot;number&quot; value=&quot;0.00&quot; disabled&gt;&lt;/td&gt;
  239. &lt;/tr&gt;
  240. &lt;tr&gt;
  241. &lt;td class=&quot;No&quot;&gt;2&lt;/td&gt;
  242. &lt;!--Book Title--&gt;
  243. &lt;td&gt;&lt;input type=&quot;text&quot; value=&quot;&quot;&gt;&lt;/td&gt;
  244. &lt;!--Author--&gt;
  245. &lt;td&gt;&lt;input type=&quot;text&quot; value=&quot;&quot;&gt;&lt;/td&gt;
  246. &lt;!--Category--&gt;
  247. &lt;td&gt;
  248. &lt;select&gt;
  249. &lt;option value=&quot;Please choose the category...&quot; disabled selected&gt;Please choose the category...&lt;/option&gt;
  250. &lt;option value=&quot;Business&quot;&gt;Business&lt;/option&gt;
  251. &lt;option value=&quot;Fiction&quot;&gt;Fiction&lt;/option&gt;
  252. &lt;option value=&quot;Mathematics&quot;&gt;Mathematics&lt;/option&gt;
  253. &lt;option value=&quot;Technology&quot;&gt;Technology&lt;/option&gt;
  254. &lt;/select&gt;
  255. &lt;/td&gt;
  256. &lt;!--Unit Price--&gt;
  257. &lt;td class=&quot;price&quot;&gt;&lt;input type=&quot;number&quot; value=&quot;0.00&quot;&gt;&lt;/td&gt;
  258. &lt;!--Quantity--&gt;
  259. &lt;td class=&quot;quantity&quot;&gt;&lt;input type=&quot;number&quot; value=&quot;0&quot;&gt;&lt;/td&gt;
  260. &lt;!--Total--&gt;
  261. &lt;td class=&quot;total&quot;&gt;&lt;input type=&quot;number&quot; value=&quot;0.00&quot; disabled&gt;&lt;/td&gt;
  262. &lt;/tr&gt;
  263. &lt;tr&gt;
  264. &lt;td class=&quot;No&quot;&gt;3&lt;/td&gt;
  265. &lt;!--Book Title--&gt;
  266. &lt;td&gt;&lt;input type=&quot;text&quot; value=&quot;&quot;&gt;&lt;/td&gt;
  267. &lt;!--Author--&gt;
  268. &lt;td&gt;&lt;input type=&quot;text&quot; value=&quot;&quot;&gt;&lt;/td&gt;
  269. &lt;!--Category--&gt;
  270. &lt;td&gt;
  271. &lt;select&gt;
  272. &lt;option value=&quot;Please choose the category...&quot; disabled selected&gt;Please choose the category...&lt;/option&gt;
  273. &lt;option value=&quot;Business&quot;&gt;Business&lt;/option&gt;
  274. &lt;option value=&quot;Fiction&quot;&gt;Fiction&lt;/option&gt;
  275. &lt;option value=&quot;Mathematics&quot;&gt;Mathematics&lt;/option&gt;
  276. &lt;option value=&quot;Technology&quot;&gt;Technology&lt;/option&gt;
  277. &lt;/select&gt;
  278. &lt;/td&gt;
  279. &lt;!--Unit Price--&gt;
  280. &lt;td class=&quot;price&quot;&gt;&lt;input type=&quot;number&quot; value=&quot;0.00&quot;&gt;&lt;/td&gt;
  281. &lt;!--Quantity--&gt;
  282. &lt;td class=&quot;quantity&quot;&gt;&lt;input type=&quot;number&quot; value=&quot;0&quot;&gt;&lt;/td&gt;
  283. &lt;!--Total--&gt;
  284. &lt;td class=&quot;total&quot;&gt;&lt;input type=&quot;number&quot; value=&quot;0.00&quot; disabled&gt;&lt;/td&gt;
  285. &lt;/tr&gt;
  286. &lt;tr&gt;
  287. &lt;td class=&quot;No&quot;&gt;4&lt;/td&gt;
  288. &lt;!--Book Title--&gt;
  289. &lt;td&gt;&lt;input type=&quot;text&quot; value=&quot;&quot;&gt;&lt;/td&gt;
  290. &lt;!--Author--&gt;
  291. &lt;td&gt;&lt;input type=&quot;text&quot; value=&quot;&quot;&gt;&lt;/td&gt;
  292. &lt;!--Category--&gt;
  293. &lt;td&gt;
  294. &lt;select&gt;
  295. &lt;option value=&quot;Please choose the category...&quot; disabled selected&gt;Please choose the category...&lt;/option&gt;
  296. &lt;option value=&quot;Business&quot;&gt;Business&lt;/option&gt;
  297. &lt;option value=&quot;Fiction&quot;&gt;Fiction&lt;/option&gt;
  298. &lt;option value=&quot;Mathematics&quot;&gt;Mathematics&lt;/option&gt;
  299. &lt;option value=&quot;Technology&quot;&gt;Technology&lt;/option&gt;
  300. &lt;/select&gt;
  301. &lt;/td&gt;
  302. &lt;!--Unit Price--&gt;
  303. &lt;td class=&quot;price&quot;&gt;&lt;input type=&quot;number&quot; value=&quot;0.00&quot;&gt;&lt;/td&gt;
  304. &lt;!--Quantity--&gt;
  305. &lt;td class=&quot;quantity&quot;&gt;&lt;input type=&quot;number&quot; value=&quot;0&quot;&gt;&lt;/td&gt;
  306. &lt;!--Total--&gt;
  307. &lt;td class=&quot;total&quot;&gt;&lt;input type=&quot;number&quot; value=&quot;0.00&quot; disabled&gt;&lt;/td&gt;
  308. &lt;/tr&gt;
  309. &lt;tr&gt;
  310. &lt;td class=&quot;No&quot;&gt;5&lt;/td&gt;
  311. &lt;!--Book Title--&gt;
  312. &lt;td&gt;&lt;input type=&quot;text&quot; value=&quot;&quot;&gt;&lt;/td&gt;
  313. &lt;!--Author--&gt;
  314. &lt;td&gt;&lt;input type=&quot;text&quot; value=&quot;&quot;&gt;&lt;/td&gt;
  315. &lt;!--Category--&gt;
  316. &lt;td&gt;
  317. &lt;select&gt;
  318. &lt;option value=&quot;Please choose the category...&quot; disabled selected&gt;Please choose the category...&lt;/option&gt;
  319. &lt;option value=&quot;Business&quot;&gt;Business&lt;/option&gt;
  320. &lt;option value=&quot;Fiction&quot;&gt;Fiction&lt;/option&gt;
  321. &lt;option value=&quot;Mathematics&quot;&gt;Mathematics&lt;/option&gt;
  322. &lt;option value=&quot;Technology&quot;&gt;Technology&lt;/option&gt;
  323. &lt;/select&gt;
  324. &lt;/td&gt;
  325. &lt;!--Unit Price--&gt;
  326. &lt;td class=&quot;price&quot;&gt;&lt;input type=&quot;number&quot; value=&quot;0.00&quot;&gt;&lt;/td&gt;
  327. &lt;!--Quantity--&gt;
  328. &lt;td class=&quot;quantity&quot;&gt;&lt;input type=&quot;number&quot; value=&quot;0&quot;&gt;&lt;/td&gt;
  329. &lt;!--Total--&gt;
  330. &lt;td class=&quot;total&quot;&gt;&lt;input type=&quot;number&quot; value=&quot;0.00&quot; disabled&gt;&lt;/td&gt;
  331. &lt;/tr&gt;
  332. &lt;/tbody&gt;
  333. &lt;tfoot&gt;
  334. &lt;tr&gt;
  335. &lt;td class=&quot;background-colour&quot; colspan=&quot;5&quot;&gt;
  336. &lt;button type=&quot;button&quot; onclick=&quot;updateGrandTotal()&quot; class=&quot;Button&quot;&gt;Calculate Grand Total Price&lt;/button&gt;
  337. &lt;/td&gt;
  338. &lt;td class=&quot;background-colour&quot; colspan=&quot;2&quot;&gt;
  339. &lt;input type=&quot;number&quot; name=&quot;Grand Total Price&quot; value=&quot;0.00&quot; class=&quot;GrandTotal&quot; disabled&gt;
  340. &lt;/td&gt;
  341. &lt;/tr&gt;
  342. &lt;/tfoot&gt;
  343. &lt;/table&gt;
  344. &lt;!-- end snippet --&gt;
  345. </details>

huangapple
  • 本文由 发表于 2023年6月13日 15:11:05
  • 转载请务必保留本文链接:https://go.coder-hub.com/76462455.html