Formos duomenų konvertavimas į „JavaScript“ objektą naudojant „jQuery“

Kaip konvertuoti visus mano formos elementus į „JavaScript“ objektą?

Norėčiau turėti būdą, kaip automatiškai sukurti „JavaScript“ objektą iš mano formos, nereikia kartoti per kiekvieną elementą. Nereikia eilutės, kurią grąžino $('#formid').serialize(); ir man nereikia žemėlapio, kurį grąžino $('#formid').serializeArray();

1503
26 июля '09 в 16:39 2009-07-26 16:39 Yisroel paklausė liepos 26 d., 09:39, 2009-07-26 16:39
ответ 51 atsakymas
  • 1
  • 2

serializeArray jau tai daro. Jums reikia tiesiog masažuoti duomenis į reikiamą formatą:

 function objectifyForm(formArray) {//serialize data function var returnArray = {}; for (var i = 0; i < formArray.length; i++){ returnArray[formArray[i]['name']] = formArray[i]['value']; } return returnArray; } 

Stebėkite paslėptus laukus, kurie turi tokį patį pavadinimą kaip tikrieji įrašai, nes jie bus perrašyti.

1583
27 июля '09 в 6:38 2009-07-27 06:38 atsakymą pateikė Tobias Cohen, liepos 27 d., 09:38, 2009-07-27 06:38

Konvertuoti formas į JSON LIKE A BOSS


Dabartinis šaltinis yra github ir bower.

$ bower įdiegti jquery-serialize-object


Dabar šis kodas pasenęs .

Šis kodas gali dirbti su visų tipų įvesties pavadinimais; ir tvarkykite juos taip, kaip tikėjotės.

border=0

Pavyzdžiui:

 <!-- all of these will work! --> <input name="honey[badger]" value="a"> <input name="wombat[]" value="b"> <input name="hello[panda][]" value="c"> <input name="animals[0][name]" value="d"> <input name="animals[0][breed]" value="e"> <input name="crazy[1][][wonky]" value="f"> <input name="dream[as][vividly][as][you][can]" value="g"> 
426
07 дек. atsakymas pateikiamas maček 07 dec. 2011-12-07 01:25 '11 ne 1:25 2011-12-07 01:25

Kas atsitiko:

 var data = {}; $(".form-selector").serializeArray().map(function(x){data[x.name] = x.value;}); 
266
22 июля '13 в 12:59 2013-07-22 12:59 atsakymą pateikė mkschreder, liepos 22 d., 13 val., 12:59, 2013-07-22 12:59

Fiksuota Tobias Cohen sprendimo versija. Jis teisingai apdoroja klaidingas vertes, pvz., 0 ir '' .

 jQuery.fn.serializeObject = function() { var arrayData, objectData; arrayData = this.serializeArray(); objectData = {}; $.each(arrayData, function() { var value; if (this.value != null) { value = this.value; } else { value = ''; } if (objectData[this.name] != null) { if (!objectData[this.name].push) { objectData[this.name] = [objectData[this.name]]; } objectData[this.name].push(value); } else { objectData[this.name] = value; } }); return objectData; }; 

„CoffeeScript“ versija, skirta lengvai koduoti:

 jQuery.fn.serializeObject = -> arrayData = @serializeArray() objectData = {} $.each arrayData, -> if @value? value = @value else value = '' if objectData[@name]? unless objectData[@name].push objectData[@name] = [objectData[@name]] objectData[@name].push value else objectData[@name] = value return objectData 
101
05 марта '11 в 1:28 2011-03-05 01:28 Atsakymą pateikė Daniel X Moore Kovo 05'11 11:28 2011-03-05 01:28

Man patinka naudoti „ Array.prototype.reduce , nes ji yra viena eilutė, ir ji nesiremia „ Underscore.js“ ar pan.

 $('#formid').serializeArray() .reduce(function(a, x) { a[x.name] = x.value; return a; }, {}); 

Tai panaši į atsakymą naudojant „ Array.prototype.map , bet nereikia papildyti savo srities su papildomu objekto kintamuoju. Vienkartiniai pirkimai.

SVARBI PASTABA . Formos su įterpimais, turinčiais dvigubus name atributus, yra galiojančios HTML ir iš tikrųjų yra bendras metodas. Šiuo atveju bet kokio atsakymo naudojimas šiame sraute būtų netinkamas (kadangi objekto raktai turi būti unikalūs).

53
12 марта '15 в 4:23 2015-03-12 04:23 atsakymą pateikė „ Ethan Brown “ kovo 12 d. 15 val. 4:23 2015-03-12 04:23

Visi šie atsakymai man atrodė per daug teisingi. Kažkas turi būti pasakyta dėl paprastumo. Tol, kol visos formos formos įvestys turi atributo atributą, tai turėtų veikti tik jim-dandy.

 $('form.myform').submit(function () { var $this = $(this) , viewArr = $this.serializeArray() , view = {}; for (var i in viewArr) { view[viewArr[i].name] = viewArr[i].value; } //Do stuff with view object here (eg JSON.stringify?) }); 
30
01 апр. Atsakymą pateikė Jeffrey Van Alstine. 2011-04-01 00:45 '11 prie 0:45 2011-04-01 00:45

Jei naudojate „ Underscore.js“ , galite naudoti palyginti trumpą:

 _.object(_.map($('#myform').serializeArray(), _.values)) 
24
12 нояб. atsakymas suteiktas olleicua lapkričio 12 d. 2013-11-12 23:08 '13, 23:08, 2013-11-12 23:08

Tai neįmanoma atlikti, neišnagrinėjus kiekvieno elemento. Ką tikrai norite žinoti, ar kažkas parašė metodą, kuris paverčia formą į JSON objektą? Kažkas panašaus turėtų dirbti - atkreipkite dėmesį, kad jis suteiks jums tik formavimo elementus, kurie bus grąžinti per POST (turi turėti pavadinimą). Tai nepatvirtinta .

 function formToJSON( selector ) { var form = {}; $(selector).find(':input[name]:enabled').each( function() { var self = $(this); var name = self.attr('name'); if (form[name]) { form[name] = form[name] + ',' + self.val(); } else { form[name] = self.val(); } }); return form; } 
21
26 июля '09 в 17:01 2009-07-26 17:01 Atsakymą pateikia TVanfosson liepos 26 d. , 09:17, 2009-07-26 17:01

Na, žinau, kad šis atsakymas jau yra labai aukštas, bet tuo pačiu metu buvo užduotas kitas panašus klausimas , ir aš taip pat buvo išsiųstas į šį klausimą. Taip pat norėčiau pasiūlyti savo sprendimą, nes jis suteikia pranašumą sprendimui: galite įtraukti neįgaliųjų formos elementus (kurie kartais yra svarbūs, atsižvelgiant į tai, kaip veikia jūsų vartotojo sąsaja)

Štai mano atsakymas iš kito SO klausimo :

Pirmiausia naudojome jQuery serializeArray() metodą, tačiau tai neapima formų elementų, kurie yra išjungti. Dažnai išjungsime „sinchronizuotus“ formų elementus su kitais puslapio šaltiniais, tačiau vis dar turime įtraukti duomenis į mūsų serializuotą objektą. Taigi trūksta serializeArray() . Mes naudojome :input selektorių, kad gautume visus įėjimo elementus (įjungti ir išjungti) šiame konteineryje, o tada $.map() kad sukurtume mūsų objektą.

 var inputs = $("#container :input"); var obj = $.map(inputs, function(n, i) { var o = {}; o[n.name] = $(n).val(); return o; }); console.log(obj); 

Atkreipkite dėmesį, kad tam kiekvienam iš jūsų įvesties reikės name atributo, kuris bus gauto objekto nuosavybės pavadinimas.

Tiesą sakant, tai šiek tiek pasikeitė nuo to, ką naudojome. Mums reikėjo sukurti objektą, kuris buvo struktūrizuotas kaip .NET IDictionary, todėl naudojome: (pateikiu čia, jei tai naudinga)

 var obj = $.map(inputs, function(n, i) { return { Key: n.name, Value: $(n).val() }; }); console.log(obj); 

Man patinka abu šie sprendimai, nes jie yra paprasta naudoti $.map() funkcija, ir jūs turite visišką valdiklį (taip, kokie elementai galiausiai įtraukti į savo rezultato objektą). Be to, nereikia papildomo papildinio. Paprastas senas jQuery.

17
19 июля '10 в 2:57 2010-07-19 02:57 atsakymą davė Samuel Meacham , liepos 19 d., 10 val., 2:57, 2010-07-19 02:57

Ši funkcija turėtų apdoroti daugiamatę matricą kartu su keliais to paties pavadinimo elementais.

Jau keletą metų naudoju jį:

 jQuery.fn.serializeJSON=function() { var json = {}; jQuery.map(jQuery(this).serializeArray(), function(n, i) { var _ = n.name.indexOf('['); if (_ > -1) { var o = json; _name = n.name.replace(/\]/gi, '').split('['); for (var i=0, len=_name.length; i<len; i++) { if (i == len-1) { if (o[_name[i]]) { if (typeof o[_name[i]] == 'string') { o[_name[i]] = [o[_name[i]]]; } o[_name[i]].push(n.value); } else o[_name[i]] = n.value || ''; } else o = o[_name[i]] = o[_name[i]] || {}; } } else { if (json[n.name] !== undefined) { if (!json[n.name].push) { json[n.name] = [json[n.name]]; } json[n.name].push(n.value || ''); } else json[n.name] = n.value || ''; } }); return json; }; 
16
11 сент. atsakymą pateikė Sergejus Varlamovas 11 sep . 2012-09-11 16:17 '12, 16:17 pm 2012-09-11 16:17

Tai galite padaryti:

 var frm = $(document.myform); var data = JSON.stringify(frm.serializeArray()); 

Žr.

15
07 апр. Harini Sekar atsakymas 07 Bal 2014-04-07 13:40 '14, 13:40 2014-04-07 13:40

Su visais atsakymais, yra tam tikra problema, kuri ...

Jei įvesite pavadinimą kaip masyvą, pvz., name[key] , tačiau jis bus sukurtas kaip

  name:{ key : value } 

Pavyzdžiui: jei turiu šią formą.

  <form> <input name="name" value="value" > <input name="name1[key1]" value="value1" > <input name="name2[key2]" value="value2" > <input name="name3[key3]" value="value3" > </form> 

Tada jis tokiu būdu generuos objektą su visais pateiktais atsakymais.

 Object { name : 'value', name1[key1] : 'value1', name2[key2] : 'value2', name3[key3] : 'value3', } 

Tačiau jis turi generuoti, kaip parodyta toliau, visi nori tai padaryti, kaip parodyta žemiau.

 Object { name : 'value', name1 : { key1 : 'value1' }, name2 : { key2 : 'value2' }, name3 : { key2 : 'value2' } } 

Tada pabandykite tai žemiau js kodo.

 <!DOCTYPE html><html><head> <script src="https://code.jquery.com/jquery-3.2.1.min.js"></script> <title>Convert form data to JavaScript object with jQuery</title> </head> <body> <form> <input name="name" value="value" > <input name="name1[key1]" value="value1" > <input name="name2[key2]" value="value2" > <input name="name3[key3]" value="value3" > <input type="checkbox" name="name4[]" value="1" checked="checked"> <input type="checkbox" name="name4[]" value="2"> <input type="checkbox" name="name4[]" value="3"> </form> </body></html> 
13
31 авг. Atsakymas pateikiamas Bhavik Hirani 31 rugpjūčio mėn . 2016-08-31 14:35 '16 at 14:35 pm 2016-08-31 14:35

Naudoti:

 function form_to_json (selector) { var ary = $(selector).serializeArray(); var obj = {}; for (var a = 0; a < ary.length; a++) obj[ary[a].name] = ary[a].value; return obj; } 

Išvada:

 {"myfield": "myfield value", "passwordfield": "mypasswordvalue"} 
12
06 окт. Adrian Seeley atsakymas, 06 spalis 2013-10-06 18:16 '13, 18:16, 2013-10-06 18:16

Vienoje eilutėje (be jokių kitų priklausomybių, išskyrus jQuery) naudojamas fiksuoto objekto privalumas funkcijai, perduotai map metodui.

 $('form').serializeArray().map(function(x){this[x.name] = x.value; return this;}.bind({}))[0] 

Ką jis daro?

 "id=2 => Object { id: "2", value: "1", comment: "ok" } 

tinka pažangiosioms žiniatinklio programoms (galite lengvai palaikyti tiek įprastą formą, tiek ir „ajax“ užklausas)

11
16 окт. atsakymas pateikiamas test30 16 okt. 2017-10-16 14:35 '17 at 14:35 2017-10-16 14:35

Paprastumas yra geresnis. Paprasta eilutė pakeista įprasta išraiška, ir iki šiol jie veikė kaip žavesys. Aš nesu reguliarus išraiškos specialistas, bet esu tikras, kad galite užpildyti labai sudėtingus objektus.

 var values = $(this).serialize(), attributes = {}; values.replace(/([^ function (match, name, value) { attributes[name] = value; }); 
7
06 апр. atsakymas pateikiamas Nr 2013-04-06 23:43 '13, 23:43, 2013-04-06 23:43

Nuo senesnio atsakymo:

 $('form input, form select').toArray().reduce(function(m,e){m[e.name] = $(e).val(); return m;},{}) 
6
14 июня '15 в 0:31 2015-06-14 00:31 atsakymą pateikė juanpastas birželio 14 d. 15 d. 0:31 2015-06-14 00:31

Naudojant „ maček“ sprendimą , aš jį modifikavau, kad dirbčiau taip, kaip ASP.NET MVC tvarko savo įdėtus / sudėtingus objektus ta pačia forma. Viskas, ką jums reikia padaryti, yra pakeisti patikrinimo dalį:

 "validate": /^[a-zA-Z][a-zA-Z0-9_]*((?:\[(?:\d*|[a-zA-Z0-9_]+)\])*(?:\.)[a-zA-Z][a-zA-Z0-9_]*)*$/, 

Tai atitiks ir teisingai parodys elementus su tokiais pavadinimais kaip:

 <input type="text" name="zooName" /> 

ir

 <input type="text" name="zooAnimals[0].name" /> 
6
11 окт. atsakymą pateikė G-Ram spalio 11 d. 2013-10-11 17:04 '13, 17:04, 2013-10-11 17:04

Paprasčiausias ir tiksliausias būdas rasti šią problemą yra naudoti „ bbq“ papildinį arba šį (maždaug 0,5 KB dydžio).

ji taip pat veikia su daugialypėmis matricomis.

5
08 дек. atsakymas, kurį pateikė Roey 2015-12-08 12:50 '15 - 12:50 2015-12-08 12:50

Radau problemą su Tobias Cohen kodu (aš neturiu pakankamai taškų, kad galėčiau apie tai tiesiogiai pakomentuoti). Jei turite du pasirinkimus, turinčius tą patį pavadinimą, abu su reikšme = ", šaltinio kodas generuos" pavadinimą ":" "vietoj" name ": [", ""]

Manau, kad tai gali būti pataisyta pridedant "|| o [this.name] == ''" į pirmą, jei sąlyga:

 $.fn.serializeObject = function() { var o = {}; var a = this.serializeArray(); $.each(a, function() { if (o[this.name] || o[this.name] == '') { if (!o[this.name].push) { o[this.name] = [o[this.name]]; } o[this.name].push(this.value || ''); } else { o[this.name] = this.value || ''; } }); return o; }; 
5
03 марта '11 в 16:00 2011-03-03 16:00 atsakymą pateikė vartotojo1134789 kovo 03 '11 16:00 val. 2011-03-03 16:00

Yra jQuery, jquery.serializeJSON papildinys . Aš sėkmingai jį panaudojau keliuose projektuose. Tai puikiai veikia.

4
03 янв. Atsakymą pateikė Michael Yagudaev, sausio 03 d 2014-01-03 03:24 '14 at 3:24 2014-01-03 03:24

Jei bandote konvertuoti visus formos laukus į JSON, kad išsiųstumėte šią formą per „Ajax“, čia yra jQuery formos įskiepis, kuris daro tai, ką daro.

4
26 июля '09 в 20:01 2009-07-26 20:01 atsakymas pateikiamas serg 26 liepa '09, 20:01 2009-07-26 20:01

Pasukite kažką į objektą (nepatikrintą)

 <script type="text/javascript"> string = {}; string.repeat = function(string, count) { return new Array(count+1).join(string); } string.count = function(string) { var count = 0; for (var i=1; i<arguments.length; i++) { var results = string.match(new RegExp(arguments[i], 'g')); count += results ? results.length : 0; } return count; } array = {}; array.merge = function(arr1, arr2) { for (var i in arr2) { if (arr1[i]  typeof arr1[i] == 'object'  typeof arr2[i] == 'object') arr1[i] = array.merge(arr1[i], arr2[i]); else arr1[i] = arr2[i] } return arr1; } array.print = function(obj) { var arr = []; $.each(obj, function(key, val) { var next = key + ": "; next += $.isPlainObject(val) ? array.print(val) : val; arr.push( next ); }); return "{ " + arr.join(", ") + " }"; } node = {}; node.objectify = function(node, params) { if (!params) params = {}; if (!params.selector) params.selector = "*"; if (!params.key) params.key = "name"; if (!params.value) params.value = "value"; var o = {}; var indexes = {}; $(node).find(params.selector+"["+params.key+"]").each(function() { var name = $(this).attr(params.key), value = $(this).attr(params.value); var obj = $.parseJSON("{"+name.replace(/([^\[]*)/, function() { return '"'+arguments[1]+'"'; }).replace(/\[(.*?)\]/gi, function() { if (arguments[1].length == 0) { var index = arguments[3].substring(0, arguments[2]); indexes[index] = indexes[index] !== undefined ? indexes[index]+1 : 0; return ':{"'+indexes[index]+'"'; } else return ':{"'+escape(arguments[1])+'"'; })+':"'+value.replace(/[\\"]/gi, function() { return "\\"+arguments[0]; })+'"'+string.repeat('}', string.count(name, ']'))+"}"); o = array.merge(o, obj); }); return o; } </script> 

Bandymo išėjimas:

 $(document).ready(function() { console.log(array.print(node.objectify($("form"), {}))); console.log(array.print(node.objectify($("form"), {selector: "select"}))); }); 

apie

 <form> <input name='input[a]' type='text' value='text'/> <select name='input[b]'> <option>select</option> </select> <input name='otherinput[c][a]' value='a'/> <input name='otherinput[c][]' value='b'/> <input name='otherinput[d][b]' value='c'/> <input name='otherinput[c][]' value='d'/> <input type='hidden' name='anotherinput' value='hidden'/> <input type='hidden' name='anotherinput' value='1'/> <input type='submit' value='submit'/> </form> 

duos:

 { input: { a: text, b: select }, otherinput: { c: { a: a, 0: b, 1: d }, d: { b: c } }, anotherinput: 1 } { input: { b: select } } 
3
23 февр. atsakymas pateiktas 23 vasario mėn . 2012-02-23 19:59 '12, 19:59 pm, 2012-02-23 19:59

Pastaruoju metu turėjau tą pačią problemą ir su šiuo .toJSON jQuery įskiepiu, kuris paverčia formą į JSON objektą, turintį tokią pačią struktūrą. vietose.

Esmė yra ta, kad jūs iš tikrųjų norite sukurti formą, kad ji turėtų pačią struktūrą, taigi leiskite man pasakyti, kad norite sukurti formą, kurioje naudotojas įterptų savo mėgstamas vietas mieste: galite pateikti šią formą <places>...</places> vaizdui <places>...</places> XML elementas, kuriame yra naudotojų mėgstamiausių vietų sąrašas, todėl <place>...</place> elementų, kurių kiekviename yra, pvz., <name>...</name> , elementas <type>...</type> , tada daiktų sąrašas <activity>...</activity> atstovauti veiksmus, kuriuos tu gali Tupa tokioje vietoje. Taigi jūsų XML struktūra atrodys taip:

 <places> <place> <name>Home</name> <type>dwelling</type> <activity>sleep</activity> <activity>eat</activity> <activity>watch TV</activity> </place> <place>...</place> <place>...</place> </places> 

Kaip vėsioje būtų JSON objektas, kuris atspindėtų šią tikslią struktūrą, kad galėtumėte:

  • Išsaugokite šį objektą kaip ir bet kurioje „ CouchDB“ tipo duomenų bazėje
  • Perskaitykite jį iš savo serverio pusės $ _POST [] ir ištraukite tinkamai įdėtą masyvą, kurį vėliau galite semantiškai manipuliuoti.
  • Jei norite konvertuoti jį į gerai suformuotą XML failą, naudokite tam tikrą serverio pusės scenarijų (net jei nežinote jo tikslios struktūros a-priori)
  • Tiesiog naudokite jį kažkaip, kaip ir bet kuriame „ Node.js“ serveryje

Gerai, todėl dabar turime galvoti apie tai, kaip forma gali būti XML failas.

Žinoma, <form> yra root , bet tada mes turime šį <place> elementą, kuris yra konteineris, o ne pats duomenų elementas, todėl negalime naudoti įvesties žyma.

Čia <fieldset> naudinga! „ <fieldset> žymes naudosime visiems konteinerio elementams mūsų formos / XML rodinyje ir tokiu būdu gauti šį rezultatą:

 <form name="places"> <fieldset name="place"> <input type="text" name="name"/> <select name="type"> <option value="dwelling">Dwelling</option> <option value="restoration">Restoration</option> <option value="sport">Sport</option> <option value="administrative">Administrative</option> </select> <input type="text" name="activity"/> <input type="text" name="activity"/> <input type="text" name="activity"/> </fieldset> </form> 

Kaip matote šioje formoje, mes sulaužome unikalių pavadinimų taisyklę, tačiau tai yra normalu, nes jie bus konvertuojami į elementų masyvą, todėl tik jų indeksas masyvo viduje.

Šiuo metu pamatysite, kaip nėra name="array[]" formos name="array[]" , ir viskas yra gana, paprasta ir semantinė.

Dabar norime, kad ši forma būtų konvertuojama į JSON objektą, kuris atrodys taip:

 {'places':{ 'place':[ { 'name': 'Home', 'type': 'dwelling', 'activity':[ 'sleep', 'eat', 'watch TV' ] }, {...}, {...} ] }} 

Dėl to čia sukūriau šį jQuery įskiepį , kurį kažkas padėjo optimizuoti šį kodą.

 $.fn.toJSO = function () { var obj = {}, $kids = $(this).children('[name]'); if (!$kids.length) { return $(this).val(); } $kids.each(function () { var $el = $(this), name = $el.attr('name'); if ($el.siblings("[name=" + name + "]").length) { if (!/radio|checkbox/i.test($el.attr('type')) || $el.prop('checked')) { obj[name] = obj[name] || []; obj[name].push($el.toJSO()); } } else { obj[name] = $el.toJSO(); } }); return obj; }; 

Aš taip pat padariau šį vieną dienoraščio įrašą, kad tai paaiškintumėte.

Tai viską paverčia forma į JSON (net radijas ir žymės >

 $.post('script.php',('form').toJSO(), ...); 

Žinau, kad yra daug būdų paversti formas į JSON objektus, ir daugeliu atvejų .serialize() ir .serializeArray() veikia gerai ir dažniausiai yra skirtos naudoti, bet manau, kad visa idėja rašyti formą kaip XML struktūrą Verta pabandyti su prasmingais vardais ir jį paversti gerai suformuotu JSON objektu, ir tai, kad jūs galite pridėti įvesties žymas su tuo pačiu pavadinimu nesirūpindami, yra labai naudinga, jei jums reikia išgauti dinamiškai generuojamus formos duomenis.

Tikiuosi, kad tai padės kam nors!

3
13 нояб. Atsakymas pateikiamas Onheiron 13 nov. 2012-11-13 21:18 '12 21:18 2012-11-13 21:18

Radau problemą su pasirinktu sprendimu.

Naudojant masyvo formas su pavadinimais, faktiškai žūsta jQuery funkcija serializeArray ().

Turiu PHP sistemą, kurioje naudojami masyvo lauko pavadinimai, kad tas pats puslapis kelis vaizdus kelis kartus būtų patalpintas tame pačiame puslapyje. Tai gali būti patogu pridėti ir redaguoti ir ištrinti viename puslapyje be formos modelio konfliktų.

Kadangi norėjau seralizuoti formas nenaudodamas šios absoliučios pagrindinės funkcijos, nusprendžiau parašyti savo seralizeArray ():

  var $vals = {}; $("#video_edit_form input").each(function(i){ var name = $(this).attr("name").replace(/editSingleForm\[/i, ''); name = name.replace(/\]/i, ''); switch($(this).attr("type")){ case "text": $vals[name] = $(this).val(); break; case "checkbox": if($(this).attr("checked")){ $vals[name] = $(this).val(); } break; case "radio": if($(this).attr("checked")){ $vals[name] = $(this).val(); } break; default: break; } }); 

Pastaba: tai taip pat veikia ne pagal pateikimo () formą, todėl, jei likusioje jūsų kodo dalyje įvyksta klaida, forma nebus išsiųsta, jei pateiksite nuorodą į nuorodą „Išsaugoti pakeitimus“.

Taip pat atkreipkite dėmesį, kad ši funkcija niekada neturėtų būti naudojama tik tam, kad patvirtintų formą, skirtą duomenims rinkti, kurie bus siunčiami į serverį tikrinimui. Tokio silpno ir masinio kodo naudojimas lems XSS ir tt

3
20 июня '11 в 12:46 2011-06-20 12:46 atsakymą davė Sammaye birželio 20 d. 11 val. 12:46 2011-06-20 12:46

Aš pats užkodavau daugialypio JavaScript objekto formą, kurią naudosiu gamybos procese. Rezultatas yra https://github.com/serbanghita/formToObject.js .

3
03 окт. Atsakymą pateikė banerban Ghiță Oct 03 2013-10-03 16:55 '13, 16:55, 2013-10-03 16:55

Man labiau patinka šis požiūris, nes: jums nereikia eiti per daugiau nei dvi kolekcijas, jei reikia, galite pasiekti kitus dalykus, išskyrus „vardą“ ir „vertę“, ir jūs galite dezinfekuoti savo vertybes prieš saugodami juos į objektą (если у вас есть значения по умолчанию, которые вы не хотите хранить, например).

 $.formObject = function($o) { var o = {}, real_value = function($field) { var val = $field.val() || ""; // additional cleaning here, if needed return val; }; if (typeof o != "object") { $o = $(o); } $(":input[name]", $o).each(function(i, field) { var $field = $(field), name = $field.attr("name"), value = real_value($field); if (o[name]) { if (!$.isArray(o[name])) { o[name] = [o[name]]; } o[name].push(value); } else { o[name] = value; } }); return o; }