返回課程

模態表單

重要性:5

建立一個函式 showPrompt(html, callback),顯示一個表單,其中包含訊息 html、一個輸入欄位和按鈕 確定/取消

  • 使用者應該在文字欄位中輸入一些內容,然後按下 Enter 或確定按鈕,接著就會呼叫 callback(value),並傳入他們輸入的值。
  • 否則,如果使用者按下 Esc 或取消,就會呼叫 callback(null)

在兩種情況下,都會結束輸入程序並移除表單。

需求

  • 表單應該在視窗的中央。
  • 表單是模態的。換句話說,在使用者關閉表單之前,無法與頁面的其他部分進行互動。
  • 顯示表單時,焦點應該在 <input> 中,供使用者輸入。
  • 按鍵 Tab/Shift+Tab 應在表單欄位間移動焦點,不允許它離開到其他頁面元素。

使用範例

showPrompt("Enter something<br>...smart :)", function(value) {
  alert(value);
});

iframe 中的範例

附註:原始文件有固定定位的表單 HTML/CSS,但讓它成為模態視窗由你決定。

開啟一個沙盒來執行任務。

可以使用半透明的 <div id="cover-div"> 來實作一個模態視窗,它會覆蓋整個視窗,如下所示

#cover-div {
  position: fixed;
  top: 0;
  left: 0;
  z-index: 9000;
  width: 100%;
  height: 100%;
  background-color: gray;
  opacity: 0.3;
}

由於 <div> 會覆蓋所有內容,因此它會取得所有點擊,而不是底下的頁面。

我們也可以透過設定 body.style.overflowY='hidden' 來防止頁面捲動。

表單不應在 <div> 中,而應在它旁邊,因為我們不希望它有 opacity

在沙盒中開啟解決方案。