form
input[type="submit"]
button[type="submit"]
sumbit事件
event.preventDefault()

searchForm 是<form>節點,在<form>裝監聽器監聽submit事件,被觸發的函式 event handler,命名為onSearchFormSubmitted,以便之後除錯。browser在執行event handler時,會建立一個"事件物件(event object)",事件物件會包含與此事件有關的屬性,並以參數形式回傳給event handler,所以 event handler function 名稱 (event) 參數寫event。

searchForm.addEventListener('submit', function onSearchFormSubmitted(event) {
  //取消browser的預設行為事件(重新導向當前頁面)
  event.preventDefault()
  //取得搜尋關鍵字 = input節點的值、去前後字串的空白、統一小寫
  const keyword = searchInput.value.trim().toLowerCase()
  //儲存符合篩選條件的項目,放入此空陣列
  let filteredMovies = []
  //錯誤處理:輸入無效字串
  //若沒有字keyword.length會是0,Boolean會是false,前面加! =>!false 等於 true,顯示警告視窗
  //if (!keyword.length) {
    return alert('請輸入有效字串!')
  }//取消這個判斷式,沒輸入仍顯示全電影清單,而非空白。
  //條件篩選
  //陣列.filter方法(參數為條件函式,簡化為 =>函式),變數filteredMovies接回傳值
  filteredMovies = movies.filter((movie) =>
    movie.title.toLowerCase().includes(keyword)
  )
  //再次使用renderMovieList函式,重新輸出至畫面
  renderMovieList(filteredMovies)
})

優化使用者體驗

兩個簡單的優化:

  • 當使用者沒有輸入任何關鍵字時,畫面顯示全部電影 (在 include()中傳入空字串,所有項目都會通過篩選)

  • 當使用者輸入的關鍵字找不到符合條件的項目時,跳出提示

if (filteredMovies.length === 0) {
  return alert(`您輸入的關鍵字:${keyword} 沒有符合條件的電影`)
}

filteredMovies.length = 0 會為falsy,所以 !falsy => true

if (!filteredMovies.length) {
  return alert(`您輸入的關鍵字:${keyword} 沒有符合條件的電影`)
}

#form #submit event #array method #string compare







Related Posts

[ 筆記 ] DOM - 網路事件處理

[ 筆記 ] DOM - 網路事件處理

useRef ref callback

useRef ref callback

[http] 不只是簡單的跨域請求 Preflight Request

[http] 不只是簡單的跨域請求 Preflight Request


Comments