--- tags: JS 直播班 - 2021 春季班 --- # 4/19 線上 Slack 助教 ## 今日輪班助教時間 SONYKO:4/19(一) 早上 9:00 - 早上11:00,下午 1:00 -下午 5:00 ## 發問規範 老師助教同學們好,**這是我的 Codepen**,我**原本預期**「JS 第 8 行會出現數字 8」,**但卻出現**「預期外的結果是 0」,想問下問題出在哪裡? ## 注意 1. 請各位先到 Slack 上將問題放在助教服務內的 thread,如圖 ![](https://i.imgur.com/nHE3sOx.png) 2. 遵循以上的發問規範以便助教查看問題,不可直接貼上網址而沒有說明文字或者只提供截圖 3. 助教會依照 Slack 上的順序回覆問題 4. 以下問題區塊只能由助教自行增加 5. 助教會將回覆寫在下方問題區塊 ## 問題 🎀 <font color="#e5b3cc">這裡只能由助教自行增加問題,請大家將問題放在 thread 上 </font>💕 <font color="#fa6f98"> 1. **獵人:**</font> 老師助教同學們好: 關於API中的Patch與PUT的差異不是很了解, 兩個都是更新資料,但在API上一個是前台更新購物車數量、一個是後台更新已處理狀態,看起來是很類似。 請問兩者有何差異呢? 以下為找到[網路說明](https://icelandcheng.medium.com/%E5%90%8C%E6%A8%A3%E6%98%AF%E6%9B%B4%E6%96%B0-http-%E5%8[…]t-%E5%92%8C-patch%E7%9A%84%E5%B7%AE%E5%88%A5-171eee8790b9),但還是不懂? 謝謝 > 助教回覆: > 簡單來說, put 就是全部更新、 patch 是部分更新。 > 假如我今天寫了一篇文章, 包含 title 和 文章內容。 我覺得 title 想換掉 , 如果我用 put 修改, 我必須整包連同文章內容一起丟回去做修改。 > > 但我今天只想要修改 title 有必要這樣嗎 !? 因此 patch 就誕生ㄌ。 > patch 可以做局部修改, 意思就是我今天想改 title 、我只要回傳 title 的部分就好, 不用整包丟回去。 > > 所以大家才會說 put 是 「取代」 path 是 「修改」 。 > 實際上 put 的行為真的比較像是取代, 透過覆蓋新的資料來達到修改的效果。 > patch 就真的是修改, 只修改想訂正的地方 這樣。 > > 以上說明若有不懂的部分歡迎再提出唷~ --- <font color="#fa6f98"> 2. **雅帆:** </font> 老師助教同學們好,這是我的 [CodePen](https://codepen.io/yafanchung/pen/MWJqbEO?editors=1011) 想請問如果有成功的點擊到購物車的按鈕,會什麼 JS 第 49 行不會如預期地執行成功的撈到 id 的值呢?想請問我是有哪邊寫錯嗎?感謝! > 助教回覆: > 程式碼 33 行的地方, 圈起來的地方漏掉雙引號喔~ > ![](https://i.imgur.com/aVLt4Vl.png) > 補上去就取得到了~ ><font color="#bbb"> > 追記: > classBtn 取出來會是 btn btn-primary js-btn ,所以不管怎麼按加入購物車都會跳 alert 。 主要會取不到是因為 if 判斷式最後加了一個 return ; 把這行 return 槓掉也是可以取得到 >A < ; </font> --- <font color="#fa6f98"> 3. **Valerie:** </font> 老師助教同學們好,這是我的 CodePen 「JS 第 232 行改成中文後」,「驗證顯示不出來」,請問問題出在哪裡? 謝謝 > 助教回覆: > 會報錯是因為找不到 document.querySelector(`.${item}`) 的值, HTML class 也要修改成中文。 修改完應該就會顯示出來囉。 > ![](https://i.imgur.com/Kgv6WEr.png) --- <font color="#fa6f98"> 4. **程翔:** </font> 老師同學們助教好 這是我的CODEPEN https://codepen.io/xxxiang/pen/KKaBEYL?editors=0010 原本預期訂單狀態可以順利更改 但是只能把未處理改成以處理 沒辦法把以處理改成未處理 程式寫法也參照老師的步驟 只是命名方式有點不同 煩請助教可以幫我除錯嗎@@ > 助教回覆: > 這個 api 有個小小的陷阱, 就是他的 true 其實是字串不是布林值。 印為是字串, 所以判斷時要加上雙引號。 如下( 69 行): ![](https://i.imgur.com/NLG8616.png) > > 修改後判斷應該就正常了。 同學試著改看看哩~ --- <font color="#fa6f98"> 5. **SeanLiu 家興:** </font> [4/19 每日任務連結 CODEPEN](https://codepen.io/LuckyTiger/pen/MWJqbpE) 不知道為什麼畫面都會重新整理兩次,一開始以為是非同步問題, 但後來到 devTools 看,是 codepen 會發兩次,用 Debug mode 就沒問題, 想請問一下這樣理解正確嗎? 補充這位同學的 [codepen](https://codepen.io/LinaChen/pen/abpamXV) 寫法不會重新整理兩次,感謝助教的協助 > 助教回覆: > 助教們這邊開啟沒有出現重新整理兩次的問題 OAQ > 同學可以錄下畫面及操作過程供我們檢視, 才能得知問題點在哪。 --- <font color="#fa6f98"> 6. **moitw:** </font> 助教好,這是我的 [codepen](https://codepen.io/tsuifei/pen/bGgxWOq) 。 在購物車的刪除部分,在刪除單筆和刪除全部的綁定監聽按鈕執行的程式裡,184,199行 各塞了getCartList(); 讓畫面重新渲染,但似乎不起作用,後面放了各console.log("test");也會執行,就是畫面不會渲染,可否麻煩協助提示有問題的部分? > 同學已找到解答: > 在購物車渲染那裡加了個條件就好了 > ``` > if (dataShoppingList.length == 0) { > shoppingCartList.innerHTML = `<h3 class=" > shoppingCart-message">購物車裡沒商品囉!</h3>`; > } > ``` > 同學好棒 👏🏻👏🏻👏🏻 --- <font color="#fa6f98"> 7. **Pei Wang:** </font> 助教同學好 不知道可不可以問這邊.... 目前所有作業都有交,最終完成到LV2,預期會顯示100%,但進度調顯示90%是正常的嗎? > 助教回覆: > > 他是 24 小時更新一次,不是即時,所以如果你提交獎品,可以直接填寫 100% 哩~ > > by 洧杰老師。 --- <font color="#fa6f98"> 8. **Sol :** </font> 助教好 這邊在提交最終作業有些疑問, 想請助教提點 https://codepen.io/solhuang/pen/rNjpqOV 在使用 validate.js 套件時 該如何設定當 input "change" 時 可以只跳出該 message 而不是一下跳出所有 message 看了一下範例與同學的作業, 大多都有一樣的問題, 這部分該如何處理? 感謝 > 助教回覆: > 主要是因為 同學在 change 監聽內又再跑了一次迴圈, 才導致一個填錯通通錯誤都一並渲染出來。 助教的做法是把迴圈拿掉, 並將 keys 改為 item.name 就可以達到同學想要的效果。 ![](https://i.imgur.com/WmQoxKp.png) --- <font color="#fa6f98"> 9. **Harvey :** </font> 老師助教同學好,這是第六周的小組任務,我在時間比序方面遇到了麻煩,自己的作法(JS 58~83)沒有辦法考慮到上下午的問題,想請老師給予意見! > 助教回覆: > [助教寫法範例](https://codepen.io/s_syoujyo/pen/dyNgyEO?editors=0011) > 先分上下午, 兩邊都把中文剪掉再拼起來(變成無中文的時間格式)。 > 如果是下午的話, 時間就 + 12 小時。 > 整理完時間直接 sort 就可以了。 同學可以參考一下範例。 > 有問題歡迎再提問哩! --- <font color="#fa6f98"> 10. **Stacey Huang :** </font> 老師助教同學們好,這是我的 CodePen,在163行~190行的函式addOrder,不曉得為什麼在送出訂單後,無法在API文件中取得送出的訂單,並在未填寫訂單資料時,按下送出按鈕,雖然會短暫出現提醒文字,但還是跳轉到Not Found的頁面,以上再麻煩助教了,謝謝 > 助教回覆: > 因為送出訂單的 input 為 `type="submit"` , 會有跳轉頁面的問題。 因此這邊只要在 addOrder 含式第一行加入 ` e.preventDefault();` 就可以成功送出訂單哩。 > 同學可以試試看, 有問題歡迎再提問唷! --- <font color="#fa6f98"> 11. **Page Shih :** </font> 老師助教同學們好,這是我的 [CodePen](https://codepen.io/kanawin821/pen/yLgxNNb?editors=0001), 這邊有跟著老師的馬拉松直播(下午場)做,「我的codepen 124-130的status取出來的是字串,所以174-178的判斷時應該是無法直接用布林值判斷」,但「老師的直播卻可以成功出現結果(2:55:00),猜測應該是因為(status==true)不管status是什麼內容,因為都是字串的關係,所以都會回傳false,所以可以把"未處理"變成"已處理",但若要從"已處理"變成""未處理"應該是沒辦法?」,想問下如果「字串要轉布林值的話有什麼方法」嗎? > 助教回覆: > 助教這邊是在程式碼 174 行的判斷是改成 > > ``` > if(status == "false"){ > newStatus = true; > }else{ > newStatus = false; > } >``` > false 改為字串判斷, 就可以正常切換了 >A < ; > 但是不建議把監聽寫在渲染函式內, 建議要關注點分離。 > 我是把 completeOrder 塞在 127 行, 雖然判斷成功但會重複發出請求, 建議修改訂單狀態要獨立函式寫。 > 同學可以試著改寫看看, 若有問題歡迎隨時提問唷!