亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

深入理解 form 系列(一)-- HTML 表單

jimhs / 2161人閱讀

摘要:表單元素從到表單相關(guān)的元素已經(jīng)得到了很大的擴(kuò)充基本能夠滿足我們常見的需求。但在此之前清楚的了解并掌握各種表單元素還是很重要的。在本文中我們將對(duì)表單元素默認(rèn)是指表單元素進(jìn)行詳細(xì)的闡述。

表單元素

從 HTML 到 HTML5, 表單相關(guān)的元素已經(jīng)得到了很大的擴(kuò)充, 基本能夠滿足我們常見的需求。但在實(shí)際工作中, 因?yàn)榻换セ蛘邽g覽器兼容的需要, 有時(shí)候不得不對(duì)原生的表單元素進(jìn)行擴(kuò)展或者模擬。但在此之前, 清楚的了解并掌握各種表單元素還是很重要的。在本文中, 我們將對(duì)表單元素 (默認(rèn)是指 HTML5 表單元素)進(jìn)行詳細(xì)的闡述。

form 1

form 會(huì)自動(dòng)處理 submit 事件 (submit 事件通常由 type=submitinput 或者 button 的元素觸發(fā))

form 會(huì)自動(dòng)做一層校驗(yàn),使用 form.novalidate 可以關(guān)閉原生的 validate

form 會(huì)根據(jù)每一個(gè)表單元素的 name 取得對(duì)應(yīng)的用戶輸入, 然后將 form dataquery string 的形式添加到 action 屬性對(duì)應(yīng)的 url 后面。默認(rèn)的請(qǐng)求方法是 GET, 默認(rèn)的action 是當(dāng)前的 url。

event.target.elements 將會(huì)返回所有表單元素

運(yùn)行上面的代碼可以看到, 提交表單之后,瀏覽器的地址會(huì)增加類似這樣的 query string ?username=tom&passworkd=123&email=test%40gmail.com
可交互型 elements

需要跟用戶進(jìn)行交互,并獲得用戶輸入的這一類表單元素,我們把它們歸類為 可交互型表單元素

下面列舉出來了一些:

input: 常用的 type 有 checkbox, tel, number, email

textarea

select

option

反饋型 elements

只是單純地反饋信息, 不需要跟用戶進(jìn)行交互的表單元素,我們把它們歸類為 反饋型表單元素。

下面列舉出來了一些:

meter

output

60
對(duì)于 output, 可以在 form.oninput 設(shè)置計(jì)算出來的 value
分組型 elements

用來對(duì)多個(gè)表單元素進(jìn)行分組的這一類表單元素, 我們把他們歸類為 分組型表單元素

下面列舉出來了一些:

fieldset

optgroup

label

for 可與對(duì)應(yīng)關(guān)聯(lián)了 id 的交互 element 相連

可以用來包裹可交互 elment, 包括多個(gè), 控制第一個(gè)

不建議嵌套 label

Title
用戶信息
用 JavaScript 處理表單 field 的抽象

最基本的結(jié)構(gòu):

  field: {
    name: String,
    value: String || String[]
  }

valueString[] 通常是用 , 分割后合成為一個(gè) String

對(duì)于復(fù)雜結(jié)構(gòu)的 name 可以使用 keyPath

  const fromKeyValues = {
    "user.name": "Tom",
    "user.phone[0].number": "123456",
    "user.phone[0].type": "mobile"
  };

  const fromValues = {
    user: {
      name: "Tom",
      phone: [
        {
          number: "123456",
          type: "mobile"
        }
      ]
    }
  };

如果對(duì)上面的代碼不是很清楚的, 請(qǐng)參考 qs

一個(gè)完整的實(shí)現(xiàn)

阻止 form 默認(rèn)的 submit 事件

checkbox 需要拿 checked 而不是 value

select-multiple 需要存多個(gè)值

除了以上幾個(gè)特殊的交互元素之外, 其他的都默認(rèn)從 value 中去取值

form.html

Login
More Info

form.js

var $form = document.querySelector("form");

function getFormValues(form) {
  var values = {};
  var elements = form.elements; // elemtns is an array-like object

  for (var i = 0; i < elements.length; i++) {
    var input = elements[i];
    if (input.name) {
      switch (input.type.toLowerCase()) {
        case "checkbox":
          if (input.checked) {
            values[input.name] = input.checked;
          }
          break;
        case "select-multiple":
          values[input.name] = values[input.name] || [];
          for (var j = 0; j < input.length; j++) {
            if (input[j].selected) {
              values[input.name].push(input[j].value);
            }
          }
          break;
        default:
          values[input.name] = input.value;
          break;
      }
    }

  }

  return values;
}

$form.addEventListener("submit", function(event) {
  event.preventDefault();
  getFormValues(event.target);
  console.log(event.target.elements);
  console.log(getFormValues(event.target));
});
結(jié)尾

如果你還想繼續(xù)了解在 react 中如何使用 form, 請(qǐng)移步我的另一篇博客 React.js -- 優(yōu)化你的表單


  • MDN 上關(guān)于 form 的介紹 ?

  • 文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

    轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/50383.html

    相關(guān)文章

    • 深入理解 form 系列)-- HTML 表單

      摘要:表單元素從到表單相關(guān)的元素已經(jīng)得到了很大的擴(kuò)充基本能夠滿足我們常見的需求。但在此之前清楚的了解并掌握各種表單元素還是很重要的。在本文中我們將對(duì)表單元素默認(rèn)是指表單元素進(jìn)行詳細(xì)的闡述。 表單元素 從 HTML 到 HTML5, 表單相關(guān)的元素已經(jīng)得到了很大的擴(kuò)充, 基本能夠滿足我們常見的需求。但在實(shí)際工作中, 因?yàn)榻换セ蛘邽g覽器兼容的需要, 有時(shí)候不得不對(duì)原生的表單元素進(jìn)行擴(kuò)展或者模擬。...

      cnio 評(píng)論0 收藏0
    • 【CSS練習(xí)】IT修真院--練習(xí)4-移動(dòng)端界面

      摘要:任務(wù)四一個(gè)最常見的移動(dòng)端頁(yè)面完成的事情完成簡(jiǎn)單布局,然后填充界面與效果圖對(duì)比優(yōu)化完成驗(yàn)收要求擴(kuò)展性頂欄固定進(jìn)行樣式兼容性研究完成任務(wù)四深度思考跟隨深度思考師兄建議進(jìn)行修改輸入欄左側(cè)換用輸入限制電話位,密碼位根據(jù)結(jié)構(gòu)的語義化修改嘗試下再加一 任務(wù)四、 一個(gè)最常見的移動(dòng)端頁(yè)面 完成的事情 完成簡(jiǎn)單布局,然后填充界面 與效果圖對(duì)比優(yōu)化 完成驗(yàn)收要求:header擴(kuò)展性 & 頂欄固定 進(jìn)行p...

      kun_jian 評(píng)論0 收藏0
    • 【譯】HTML表單指南---第個(gè)HTML表單

      摘要:一個(gè)表單由一或多個(gè)部件組成,這些部件可以是文本框單行或多行選擇框按鈕復(fù)選框或單選按鈕。在我們的示例里,一個(gè)文本框中用了該屬性的默認(rèn)值,該值表示一個(gè)基本的單行文本框,用于接收無控制或驗(yàn)證的任何文本。 前言 這個(gè)系列譯自mdn上的一份表單指南,原文詳盡闡述了表單相關(guān)的基礎(chǔ)知識(shí)。而表單作為一個(gè)經(jīng)典的頁(yè)面交互方式,是每個(gè)前端工程師繞不開的話題,通過翻譯這個(gè)系列的文章既是有助于掃清自己的知識(shí)盲區(qū)...

      yearsj 評(píng)論0 收藏0
    • 編寫高質(zhì)量Javascript的要點(diǎn)-Review深入理解Javascript系列()

      摘要:編寫高質(zhì)量的要點(diǎn)深入理解系列一知識(shí)點(diǎn)最小全局變量全局變量命名易與第三方的腳本引起沖突所以盡可能少的使用全局變量是很重要的相關(guān)策略有命名空間模式或是函數(shù)立即自動(dòng)執(zhí)行,但是要想讓全局變量少最重要的還是始終使用來聲明變量。 Title: 編寫高質(zhì)量Javascript的要點(diǎn)-Review深入理解Javascript系列(一)date: 2017-6-9 14:14:20 status: p...

      wh469012917 評(píng)論0 收藏0
    • 【譯】怎么樣構(gòu)建HTML表單

      摘要:當(dāng)你構(gòu)建表單時(shí),可以試著聽一下屏幕閱讀器如何讀取它,若聽起來很奇怪,那就有必要改進(jìn)你的表單結(jié)構(gòu)了。該規(guī)則必須在表單頭部以保證在用戶找到必填元素之前,屏幕閱讀器等無障礙設(shè)備能將其展示或讀給用戶。 系列文章說明 原文 在建立HTML表單時(shí),最重要的一件事就是如何用正確的方式構(gòu)建它。而之所以重要,原因有二:一是保證表單能被正確使用、二是這能保證你的表單是無障礙的(可以被能力不同的人使用)...

      hover_lew 評(píng)論0 收藏0

    發(fā)表評(píng)論

    0條評(píng)論

    jimhs

    |高級(jí)講師

    TA的文章

    閱讀更多
    最新活動(dòng)
    閱讀需要支付1元查看
    <