最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

一. 原始做法

<div id="form">
  <select id='select1'>
   <option value="">--請(qǐng)選擇--</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會(huì)說(shuō),So easy,通過Jquery id 去獲取每個(gè)輸入框的值就OK。多簡(jiǎn)單。

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

二. 升級(jí)做法.

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

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

<div id="form">
    <select data-field='select1'>
     <option value="">--請(qǐng)選擇--</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 提供一個(gè)getEntity方法。 讀取外層的Form然后找到所有的data-field 屬性去遍歷. 因?yàn)檩斎肟蛴衏heckbox和radio,input和select, 所以判斷類型先取出值。然后調(diào)用getField方法構(gòu)建實(shí)體。代碼就不做詳細(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();
     }
     // 獲取單個(gè)屬性的值,并擴(kuò)展到result對(duì)象里面
     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 下面來(lái)看看上面輸出的結(jié)果,哈哈值取到了。

2.4 下面我們來(lái)看看看嵌套的對(duì)象

<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  提供了獲取實(shí)體的方法,當(dāng)然也要提供賦值的方法呀。下面來(lái)看看賦值的方法

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ái)系統(tǒng),不會(huì)考慮像后臺(tái)backend 系統(tǒng)那樣,用react,angularjs這種MVVM框架, 雖然只是用了一個(gè)Jquery而已。不過我們還是可以通過一些方法來(lái)簡(jiǎn)化項(xiàng)目代碼的。

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

相關(guān)文章

  • 微信實(shí)現(xiàn)自動(dòng)跳轉(zhuǎn)到用其他瀏覽器打開指定APP下載

    微信實(shí)現(xiàn)自動(dòng)跳轉(zhuǎn)到用其他瀏覽器打開指定APP下載

    這篇文章主要介紹了微信實(shí)現(xiàn)自動(dòng)跳轉(zhuǎn)到用其他瀏覽器打開指定APP下載,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來(lái)看看吧
    2019-02-02
  • javascript parseInt 大改造

    javascript parseInt 大改造

    還隱約記得第一次遇到 parseInt這個(gè)詭異問題的時(shí)候,以為發(fā)現(xiàn)了IE的BUG,興奮不已。
    2009-09-09
  • ES6的新特性概覽

    ES6的新特性概覽

    Nick Justice是GitHub開發(fā)者計(jì)劃的一員。早在ES6語(yǔ)言標(biāo)準(zhǔn)發(fā)布之前,他就借助像Babel這樣的轉(zhuǎn)譯器以及最新版本的瀏覽器在自己的項(xiàng)目中使用ES6特性。他認(rèn)為,ES6的新特性將極大地改變JavaScript的編寫方式
    2016-03-03
  • Bootstrap Fileinput文件上傳組件用法詳解

    Bootstrap Fileinput文件上傳組件用法詳解

    這篇文章主要介紹了Bootstrap Fileinput文件上傳組件用法詳解的相關(guān)資料
    2016-05-05
  • Javascript圖像處理—虛擬邊緣介紹及使用方法

    Javascript圖像處理—虛擬邊緣介紹及使用方法

    虛擬邊緣就是按照一定映射關(guān)系,給圖像添加邊緣那么虛擬邊緣有什么用呢?接下來(lái)詳細(xì)介紹,需要了解的朋友可以參考下
    2012-12-12
  • JS原生瀑布流效果實(shí)現(xiàn)

    JS原生瀑布流效果實(shí)現(xiàn)

    這篇文章主要介紹了JS原生瀑布流效果實(shí)現(xiàn) ,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • JS實(shí)現(xiàn)鼠標(biāo)框選效果完整實(shí)例

    JS實(shí)現(xiàn)鼠標(biāo)框選效果完整實(shí)例

    這篇文章主要介紹了JS實(shí)現(xiàn)鼠標(biāo)框選效果,可實(shí)現(xiàn)鼠標(biāo)點(diǎn)擊出現(xiàn)框選效果的功能,同時(shí)下方實(shí)時(shí)顯示框選大小,涉及javascript鼠標(biāo)事件的響應(yīng)與頁(yè)面元素的動(dòng)態(tài)運(yùn)算技巧,需要的朋友可以參考下
    2016-06-06
  • Java 生成隨機(jī)字符的示例代碼

    Java 生成隨機(jī)字符的示例代碼

    這篇文章主要介紹了Java 生成隨機(jī)字符的示例代碼,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-01-01
  • 簡(jiǎn)單的網(wǎng)頁(yè)廣告特效實(shí)例

    簡(jiǎn)單的網(wǎng)頁(yè)廣告特效實(shí)例

    下面小編就為大家?guī)?lái)一篇簡(jiǎn)單的網(wǎng)頁(yè)廣告特效實(shí)例。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來(lái)看看吧
    2017-08-08
  • JavaScript+html實(shí)現(xiàn)前端頁(yè)面滑動(dòng)驗(yàn)證(2)

    JavaScript+html實(shí)現(xiàn)前端頁(yè)面滑動(dòng)驗(yàn)證(2)

    這篇文章主要為大家詳細(xì)介紹了JavaScript+html實(shí)現(xiàn)前端頁(yè)面滑動(dòng)驗(yàn)證的第二種方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-06-06

最新評(píng)論

独山县| 石楼县| 文成县| 凌源市| 始兴县| 临邑县| 景东| 海阳市| 荣昌县| 兰州市| 定兴县| 巨野县| 清新县| 黑水县| 吐鲁番市| 汾西县| 大埔县| 怀柔区| 丰镇市| 九龙城区| 天气| 陇南市| 辽阳县| 嘉义市| 临城县| 同德县| 辰溪县| 富平县| 东丰县| 钟山县| 阿坝| 巴彦县| 罗定市| 积石山| 临泽县| 巨野县| 宁明县| 乐昌市| 镇巴县| 丘北县| 芦山县|