欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

利用JS輕松實現(xiàn)獲取表單數(shù)據(jù)

 更新時間:2016年12月06日 16:04:10   作者:我有一顆四葉草  
本文主要介紹了利用JS輕松實現(xiàn)獲取表單數(shù)據(jù)。方法有別于原始的做法,大家可以試著找原始做法與本文所說方法之間的區(qū)別。有興趣的朋友可以看下,希望對大家有所幫助

接觸過Angularjs的都知道,ng支持雙向綁定,我們可以輕輕松松的通過ngModel將我們的值綁定到界面,當(dāng)修改了值提交表單的時候不需要再重新通過ID去重新抓取輸入框信息了。那對于我們開發(fā)前臺網(wǎng)站,不用ng一類的MVVM框架,只引用了Jquery,那么在處理表單的時候該怎么做呢。

一. 原始做法

<div id="form">
  <select id='select1'>
   <option value="">--請選擇--</option>
   <option value="1">--1--</option>
   <option value="2">--2--</option>
   <option value="3">--3--</option>
  </select>
  <input id='radio1' type="radio" />
  <input id='text1' type="text" />
  <textarea id='textArea1' ></textarea>
</div>

程序員A會說,So easy,通過Jquery id 去獲取每個輸入框的值就OK。多簡單。

function getEntity(){
  return {
    select1:$("#select1").val(),
    radio1:$("#radio1").prop('checked'),
    text1:$("text1").val(),
    textArea1:$("textArea1").val()
  }
}

二. 升級做法.

 程序員B說, 這樣不行哦,很多頁面都有表單提交, 那不是每個地方都要用Jquery去獲取值,如果以后新增了輸入框,每次HTML修改了,還要修改對應(yīng)的JS,多麻煩。于是愛偷懶的程序員B想到了一種方法,通過自定義標(biāo)簽來實現(xiàn)。

 2.1  我們將表單包裝到一個form的div下,每個輸入的控件新增一個data-field屬性. data-field里面寫構(gòu)建實體的屬性名稱,考慮到會出現(xiàn)嵌套的對象。所以data-field 里面屬性名稱通過 . 點來隔開,譬如  data-field='Person.Name' 后面就會構(gòu)建出 { Person:{ Name:xxx }} .下面的是沒有嵌套的對象的例子

<div id="form">
    <select data-field='select1'>
     <option value="">--請選擇--</option>
     <option value="1">--1--</option>
     <option value="2">--2--</option>
     <option value="3">--3--</option>
    </select>
    <input data-field='radio1' type="radio" />
    <input data-field='text1' type="text" />
    <textarea data-field='textArea1'></textarea>
 </div>

2.2 提供一個getEntity方法。 讀取外層的Form然后找到所有的data-field 屬性去遍歷. 因為輸入框有checkbox和radio,input和select, 所以判斷類型先取出值。然后調(diào)用getField方法構(gòu)建實體。代碼就不做詳細(xì)解答了。應(yīng)該都能看懂。只是想表達(dá)一下思路想法而已。

function getEntity(form) {
   var result = {};
   $(form).find("[data-field]").each(function() {
     var field = $(this).attr("data-field");
     var val;
 
     if ($(this).attr('type') == 'checkbox') {
       val = $(this).prop('checked');
     } else if ($(this).attr('type') == 'radio') {
       val = $(this).prop('checked');
     } else {
       val = $(this).val();
     }
     // 獲取單個屬性的值,并擴(kuò)展到result對象里面
     getField(field.split('.'), val, result);
   });
   return result;
 }

function getField(fieldNames, value, result) {
  if (fieldNames.length > 1) {
    for (var i = 0; i < fieldNames.length - 1; i++) {
      if (result[fieldNames[i]] == undefined) {
        result[fieldNames[i]] = {}
      }
      result = result[fieldNames[i]];
    }
    result[fieldNames[fieldNames.length - 1]] = value;
  } else {
    result[fieldNames[0]] = value;
  }
}

2.3 下面來看看上面輸出的結(jié)果,哈哈值取到了。

2.4 下面我們來看看看嵌套的對象

<div id="form">
    <select data-field='Person.Job'>
     <option value="">--職位--</option>
     <option value="java工程師">java工程師</option>
     <option value="net工程師">.net工程師</option>
     <option value="python工程師">python工程師</option>
    </select>
    <input data-field='Person.Desc' type="text" />
  </div>

2.5  提供了獲取實體的方法,當(dāng)然也要提供賦值的方法呀。下面來看看賦值的方法

function setEntity(form, entity) {
  $(form).find("[data-field]").each(function() {
    var field = $(this).attr("data-field");
    fieldNames = field.split('.');
    var value = JSON.parse(JSON.stringify(entity));
    for (var index = 0; index < fieldNames.length; index++) {
      value = value[fieldNames[index]];
      if (!value) {
        break;
      }
    }
    if ($(this).attr("type") === "checkbox" ||
      $(this).attr("type") === "radio") {
      $(this).attr('checked', Boolean(value));
    } else {
      if (value) {
        $(this).val(value);
      } else {
        $(this).val("");
      }
    }
  })
}

 

呵呵,值附上去了.

     三. 總結(jié):

    上面只是提供了解決方案, 雖然前臺系統(tǒng),不會考慮像后臺backend 系統(tǒng)那樣,用react,angularjs這種MVVM框架, 雖然只是用了一個Jquery而已。不過我們還是可以通過一些方法來簡化項目代碼的。

以上就是本文的全部內(nèi)容,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,同時也希望多多支持腳本之家!

相關(guān)文章

  • 如何改進(jìn)javascript代碼的性能

    如何改進(jìn)javascript代碼的性能

    在web應(yīng)用中,應(yīng)用了大量的Javascript,因此代碼的執(zhí)行效率變得尤為重要,也就是性能!為了提高JS的性能,我們應(yīng)該掌握一些基本的性能優(yōu)化方式,并讓它成為我們書寫代碼的習(xí)慣。下面介紹幾種優(yōu)化性能的方式,很多初學(xué)者甚至有經(jīng)驗的開發(fā)者也會忽略,希望對你有幫助
    2015-04-04
  • 微信小程序播放背景音樂的實例代碼

    微信小程序播放背景音樂的實例代碼

    這篇文章主要介紹了微信小程序播放背景音樂,實現(xiàn)原理是通過wx.getBackgroundAudioManager獲取全局唯一的背景音頻管理器,本文通過實例代碼給大家介紹的非常詳細(xì),需要的朋友參考下吧
    2022-01-01
  • 在weex中愉快的使用scss的方法步驟

    在weex中愉快的使用scss的方法步驟

    這篇文章主要介紹了在weex中愉快的使用scss的方法步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-01-01
  • 分享我對JS插件開發(fā)的一些感想和心得

    分享我對JS插件開發(fā)的一些感想和心得

    這篇文章主要給大家分享我對JS插件開發(fā)的一些感想和心得的相關(guān)資料,需要的朋友可以參考下
    2016-02-02
  • 微信小程序methods中定義的方法互相調(diào)用的實例代碼

    微信小程序methods中定義的方法互相調(diào)用的實例代碼

    這篇文章主要介紹了微信小程序methods中定義的方法互相調(diào)用的實例代碼,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-08-08
  • 微信小程序左右滑動的實現(xiàn)代碼

    微信小程序左右滑動的實現(xiàn)代碼

    這篇文章主要介紹了微信小程序左右滑動的實現(xiàn)代碼,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2017-12-12
  • 判斷iframe是否加載完成的完美方法

    判斷iframe是否加載完成的完美方法

    一般來說,我們判斷 iframe 是否加載完成其實與 判斷JavaScript 文件是否加載完成 采用的方法很類似
    2010-01-01
  • 在微信小程序中使用mqtt服務(wù)的方法

    在微信小程序中使用mqtt服務(wù)的方法

    這篇文章主要介紹了在微信小程序中使用mqtt服務(wù)的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • js中g(shù)etBoundingClientRect的作用及兼容方案詳解

    js中g(shù)etBoundingClientRect的作用及兼容方案詳解

    這篇文章主要介紹了js中g(shù)etBoundingClientRect的作用及兼容方案詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-02-02
  • JavaScript 異步方法隊列鏈實現(xiàn)代碼分析

    JavaScript 異步方法隊列鏈實現(xiàn)代碼分析

    在javascript中,方法的鏈?zhǔn)秸{(diào)用很流行,使用jQuery的朋友對此一定深有體會。
    2010-06-06

最新評論