ভাবছি জাভাস্ক্রিপ্টে jquery বা কোনও ফ্রেমওয়ার্ক ছাড়াই কোনও ফাংশন রয়েছে যা আমাকে ফর্মটি সিরিয়ালায়িত করতে এবং সিরিয়ালাইজড সংস্করণটি অ্যাক্সেস করতে দেয়?
ভাবছি জাভাস্ক্রিপ্টে jquery বা কোনও ফ্রেমওয়ার্ক ছাড়াই কোনও ফাংশন রয়েছে যা আমাকে ফর্মটি সিরিয়ালায়িত করতে এবং সিরিয়ালাইজড সংস্করণটি অ্যাক্সেস করতে দেয়?
উত্তর:
ক্ষুদ্রতর থেকে সিরিয়াল লাইব্রেরি কোনও ফ্রেমওয়ার্কের উপর নির্ভর করে না। এই জাতীয় কিছু ব্যতীত, আপনাকে নিজেরাই ক্রমিক ক্রিয়াকলাপ বাস্তবায়ন করতে হবে। (যদিও ১.২ কিলোবাইটের ওজনে, কেন এটি ব্যবহার করবেন না?)
case 'email':
That's an error
খাঁটি জাভাস্ক্রিপ্ট পদ্ধতিটি এখানে:
var form = document.querySelector('form');
var data = new FormData(form);
var req = new XMLHttpRequest();
req.send(data);
যদিও এটি কেবল পোস্ট অনুরোধের জন্য কাজ করছে বলে মনে হচ্ছে।
req.open("POST", "<your-url>");
আগে এটি ব্যবহার করতে হতে পারে req.send(data);
অন্যথায় আমার InvalidStateError: XMLHttpRequest state must be OPENED.
ফায়ারফক্স on 66 এ ত্রুটি ছিল It এটি অন্যান্য অনুরোধগুলির সাথেও কাজ করা উচিত যেমন PUT আপনি PUT এর সাথে POST প্রতিস্থাপন করেন।
আপনি ব্রাউজারে সমর্থন লক্ষ্যমাত্রা রাখেন, তাহলে URLSearchParams
এপিআই ( সাম্প্রতিকতম ব্রাউজার ) এবং FormData(formElement)
কন্সট্রাক্টর ( সাম্প্রতিকতম ব্রাউজার এজ ছাড়া ) এই ব্যবহার করুন:
new URLSearchParams(new FormData(formElement)).toString()
যে ব্রাউজারগুলি সমর্থন করে URLSearchParams
তবে FormData(formElement)
নির্মাণকারী নয়, এই ফর্মডাটা পলিফিল এবং এই কোডটি ব্যবহার করুন ( আইআই বাদে সর্বত্র কাজ করে):
new URLSearchParams(Array.from(new FormData(formElement))).toString()
এমনকি পুরানো ব্রাউজারগুলির জন্য (যেমন আইই 10), ফর্মডাটা পলিফিল , প্রয়োজনে একটি Array.from
পলফিল এবং এই কোডটি ব্যবহার করুন:
Array.from(
new FormData(formElement),
e => e.map(encodeURIComponent).join('=')
).join('&')
.toString()
এখানে কি সত্যিই প্রয়োজনীয়?
URLSearchParams
, তবে হ্যাঁ। স্ট্রিং রূপান্তরটিও স্পষ্টভাবে ঘটে যদি আপনি কোনও স্ট্রিংকে ইন্টারপোল্ট করে বা যোগ করেন তবে এই ক্ষেত্রে সুস্পষ্ট toString
কলের প্রয়োজন নেই।
new FormData(formElement)
এখনও সেখানে সমর্থন করা হয় না?
function serialize (form) {
if (!form || form.nodeName !== "FORM") {
return;
}
var i, j, q = [];
for (i = form.elements.length - 1; i >= 0; i = i - 1) {
if (form.elements[i].name === "") {
continue;
}
switch (form.elements[i].nodeName) {
case 'INPUT':
switch (form.elements[i].type) {
case 'text':
case 'tel':
case 'email':
case 'hidden':
case 'password':
case 'button':
case 'reset':
case 'submit':
q.push(form.elements[i].name + "=" + encodeURIComponent(form.elements[i].value));
break;
case 'checkbox':
case 'radio':
if (form.elements[i].checked) {
q.push(form.elements[i].name + "=" + encodeURIComponent(form.elements[i].value));
}
break;
}
break;
case 'file':
break;
case 'TEXTAREA':
q.push(form.elements[i].name + "=" + encodeURIComponent(form.elements[i].value));
break;
case 'SELECT':
switch (form.elements[i].type) {
case 'select-one':
q.push(form.elements[i].name + "=" + encodeURIComponent(form.elements[i].value));
break;
case 'select-multiple':
for (j = form.elements[i].options.length - 1; j >= 0; j = j - 1) {
if (form.elements[i].options[j].selected) {
q.push(form.elements[i].name + "=" + encodeURIComponent(form.elements[i].options[j].value));
}
}
break;
}
break;
case 'BUTTON':
switch (form.elements[i].type) {
case 'reset':
case 'submit':
case 'button':
q.push(form.elements[i].name + "=" + encodeURIComponent(form.elements[i].value));
break;
}
break;
}
}
return q.join("&");
}
সূত্র: http://code.google.com/p/form-serialize/source/browse/trunk/serialize-0.1.js
এখানে টিবিটিবসের সামান্য পরিবর্তিত সংস্করণ রয়েছে:
function serialize(form) {
var field, s = [];
if (typeof form == 'object' && form.nodeName == "FORM") {
var len = form.elements.length;
for (i=0; i<len; i++) {
field = form.elements[i];
if (field.name && !field.disabled && field.type != 'file' && field.type != 'reset' && field.type != 'submit' && field.type != 'button') {
if (field.type == 'select-multiple') {
for (j=form.elements[i].options.length-1; j>=0; j--) {
if(field.options[j].selected)
s[s.length] = encodeURIComponent(field.name) + "=" + encodeURIComponent(field.options[j].value);
}
} else if ((field.type != 'checkbox' && field.type != 'radio') || field.checked) {
s[s.length] = encodeURIComponent(field.name) + "=" + encodeURIComponent(field.value);
}
}
}
}
return s.join('&').replace(/%20/g, '+');
}
অক্ষম ক্ষেত্রগুলি বাতিল করা হয় এবং নামগুলি ইউআরএল এনকোড করাও থাকে। % 20 অক্ষরের রিজেক্স প্রতিস্থাপন স্ট্রিংটি ফেরার আগে একবারই হয়।
JQuery এর se .সরিয়ালাইজ () পদ্ধতি থেকে ফলাফলের জন্য ক্যোয়ারী স্ট্রিংটি অভিন্ন আকারে।
form.nodeName.toLowerCase() == "form"
পরিবর্তে যোগ করতে পারেনform.nodeName == "FORM"
আমি জেন্ডাভা ডেকানো থেকে উত্তরটি দিয়ে শুরু করেছি।
এটি তার ফাংশনের জবাবে উল্লিখিত কয়েকটি সমস্যা সমাধান করা উচিত।
বোতামের ধরণের নামগুলির মূল্য না থাকলে এখনও তা উপেক্ষা করা হবে।
function serialize(form, evt){
var evt = evt || window.event;
evt.target = evt.target || evt.srcElement || null;
var field, query='';
if(typeof form == 'object' && form.nodeName == "FORM"){
for(i=form.elements.length-1; i>=0; i--){
field = form.elements[i];
if(field.name && field.type != 'file' && field.type != 'reset'){
if(field.type == 'select-multiple'){
for(j=form.elements[i].options.length-1; j>=0; j--){
if(field.options[j].selected){
query += '&' + field.name + "=" + encodeURIComponent(field.options[j].value).replace(/%20/g,'+');
}
}
}
else{
if((field.type != 'submit' && field.type != 'button') || evt.target == field){
if((field.type != 'checkbox' && field.type != 'radio') || field.checked){
query += '&' + field.name + "=" + encodeURIComponent(field.value).replace(/%20/g,'+');
}
}
}
}
}
}
return query.substr(1);
}
এইভাবে আমি বর্তমানে এই ফাংশনটি ব্যবহার করছি।
<form onsubmit="myAjax('http://example.com/services/email.php', 'POST', serialize(this, event))">
আপনার যদি জেসন ফর্ম্যাটে পোষ্ট ব্যবহার করে "মাইফর্ম" ফর্মটি জমা করতে হয় তবে আপনি এটি করতে পারেন:
const formEntries = new FormData(myForm).entries();
const json = Object.assign(...Array.from(formEntries, ([x,y]) => ({[x]:y})));
fetch('/api/foo', {
method: 'POST',
body: JSON.stringify(json)
});
দ্বিতীয় রেখার মতো অ্যারে থেকে রূপান্তরিত হয়:
[["firstProp", "firstValue"], ["secondProp", "secondValue"], ...and so on... ]
... একটি নিয়মিত বস্তুতে যেমন:
{"firstProp": "firstValue", "secondProp": "secondValue", ...and so on ... }
... এটি একটি মানচিত্রফ্র্যানে অ্যারে.ফ্রমে () এ যাওয়ার মাধ্যমে এই রূপান্তরটি করে। এই মানচিত্রএফএন প্রতিটি ["a", "b"] জোড়াতে প্রয়োগ করা হয় এবং এগুলিকে {"a": "b" into তে রূপান্তরিত করে যাতে অ্যারেটিতে প্রতিটিতে একটি করে সম্পত্তি থাকা অনেকগুলি অবজেক্ট থাকে। জোড়ের প্রথম এবং দ্বিতীয় অংশের নাম পেতে মানচিত্রএফএন "ডিস্ট্রাকচারিং" ব্যবহার করছে এবং মানচিত্রএফএন দ্বারা প্রত্যাবর্তিত অবজেক্টে সম্পত্তিটির নাম নির্ধারণের জন্য এটি একটি ES6 "কমপিউটেডপ্রটিটির নাম "ও ব্যবহার করছে (এই কারণেই বলা হয়েছে" [ x]: কেবল "x: কিছু" এর চেয়ে কিছু "।
এই সমস্ত একক সম্পত্তি বস্তুগুলি তারপরে অবজেক্ট.স্যাসাইন () ফাংশনের আর্গুমেন্টগুলিতে প্রেরণ করা হয় যা সমস্ত একক সম্পত্তি অবজেক্টগুলিকে একক বস্তুতে মার্জ করে যা সমস্ত বৈশিষ্ট্যযুক্ত।
অ্যারে.ফ্রোম (): https://developer.mozilla.org/en-US/docs/Web/ জাভা স্ক্রিপ্ট / রেফারেন্স / গ্লোবাল_অবজেক্টস / অ্যারে / ফ্রম
প্যারামিটারগুলিতে বিকাশ: https://simonsmith.io/destructuring-objects-as-function-paraters-in-es6/
এখানে গণনা করা সম্পত্তির নাম সম্পর্কে আরও: একটি জাভাস্ক্রিপ্ট অবজেক্ট আক্ষরিক সম্পত্তি হিসাবে নাম পরিবর্তনশীল?
সমস্ত ব্রাউজারে কাজ করে।
const formSerialize = formElement => {
const values = {};
const inputs = formElement.elements;
for (let i = 0; i < inputs.length; i++) {
values[inputs[i].name] = inputs[i].value;
}
return values;
}
const dumpValues = form => () => {
const r = formSerialize(form);
console.log(r);
console.log(JSON.stringify(r));
}
const form = document.querySelector('form');
dumpValues(form)();
form.addEventListener('change',dumpValues(form));
<form action="/my-handling-form-page" method="post">
<div>
<label for="name">Name:</label>
<input type="text" id="name" name="user_name" value="John">
</div>
<div>
<label for="mail">E-mail:</label>
<input type="email" id="mail" name="user_mail" value="john@jonhson.j">
</div>
<div>
<label for="interests">Interest:</label>
<select required="" id="interests" name="interests">
<option value="" selected="selected">- None -</option>
<option value="drums">Drums</option>
<option value="js">Javascript</option>
<option value="sports">Sports</option>
<option value="trekking">Trekking</option>
</select>
</div>
<div>
<label for="msg">Message:</label>
<textarea id="msg" name="user_message">Hello My Friend</textarea>
</div>
</form>
HTMLElement.prototype.serialize = function(){
var obj = {};
var elements = this.querySelectorAll( "input, select, textarea" );
for( var i = 0; i < elements.length; ++i ) {
var element = elements[i];
var name = element.name;
var value = element.value;
if( name ) {
obj[ name ] = value;
}
}
return JSON.stringify( obj );
}
এটির মতো ব্যবহার করতে:
var dataToSend = document.querySelector("form").serialize();
আমি আশা করি আমি সাহায্য করেছি।
আপনি যদি কোনও ইভেন্টের ইনপুটগুলিকে সিরিয়ালাইজ করতে খুঁজছেন। এখানে আমি ব্যবহার করি এমন একটি খাঁটি জাভাস্ক্রিপ্ট পদ্ধতির।
// serialize form
var data = {};
var inputs = [].slice.call(e.target.getElementsByTagName('input'));
inputs.forEach(input => {
data[input.name] = input.value;
});
ডেটা ইনপুটগুলির একটি জাভাস্ক্রিপ্ট অবজেক্ট হবে।
@ সাইমনস্টাইনবার্গারের কোডটির একটি রিফ্যাক্টরড সংস্করণ কম ভেরিয়েবল ব্যবহার করে এবং forEach
লুপগুলির গতির সুবিধা গ্রহণ করে (যা এর চেয়ে কিছুটা দ্রুত for
)
function serialize(form) {
var result = [];
if (typeof form === 'object' && form.nodeName === 'FORM')
Array.prototype.slice.call(form.elements).forEach(function(control) {
if (
control.name &&
!control.disabled &&
['file', 'reset', 'submit', 'button'].indexOf(control.type) === -1
)
if (control.type === 'select-multiple')
Array.prototype.slice.call(control.options).forEach(function(option) {
if (option.selected)
result.push(encodeURIComponent(control.name) + '=' + encodeURIComponent(option.value));
});
else if (
['checkbox', 'radio'].indexOf(control.type) === -1 ||
control.checked
) result.push(encodeURIComponent(control.name) + '=' + encodeURIComponent(control.value));
});
return result.join('&').replace(/%20/g, '+');
}
আমি টিবিটিবসের উত্তরটি এমন কিছুতে রিফেক্টর করেছি যা পড়ার জন্য আরও পরিষ্কার। ৮০ টি চরিত্রের প্রস্থ এবং কয়েকটি মন্তব্যের কারণে এটি কিছুটা দীর্ঘ।
অতিরিক্তভাবে, এটি ফাঁকা ক্ষেত্রের নাম এবং ফাঁকা মানগুলিকে উপেক্ষা করে।
// Serialize the specified form into a query string.
//
// Returns a blank string if +form+ is not actually a form element.
function $serialize(form, evt) {
if(typeof(form) !== 'object' && form.nodeName !== "FORM")
return '';
var evt = evt || window.event || { target: null };
evt.target = evt.target || evt.srcElement || null;
var field, query = '';
// Transform a form field into a query-string-friendly
// serialized form.
//
// [NOTE]: Replaces blank spaces from its standard '%20' representation
// into the non-standard (though widely used) '+'.
var encode = function(field, name) {
if (field.disabled) return '';
return '&' + (name || field.name) + '=' +
encodeURIComponent(field.value).replace(/%20/g,'+');
}
// Fields without names can't be serialized.
var hasName = function(el) {
return (el.name && el.name.length > 0)
}
// Ignore the usual suspects: file inputs, reset buttons,
// buttons that did not submit the form and unchecked
// radio buttons and checkboxes.
var ignorableField = function(el, evt) {
return ((el.type == 'file' || el.type == 'reset')
|| ((el.type == 'submit' || el.type == 'button') && evt.target != el)
|| ((el.type == 'checkbox' || el.type == 'radio') && !el.checked))
}
var parseMultiSelect = function(field) {
var q = '';
for (var j=field.options.length-1; j>=0; j--) {
if (field.options[j].selected) {
q += encode(field.options[j], field.name);
}
}
return q;
};
for(i = form.elements.length - 1; i >= 0; i--) {
field = form.elements[i];
if (!hasName(field) || field.value == '' || ignorableField(field, evt))
continue;
query += (field.type == 'select-multiple') ? parseMultiSelect(field)
: encode(field);
}
return (query.length == 0) ? '' : query.substr(1);
}
evt = evt || window.event || { target: null };
(সম্পাদনাটি যেমন হয়েছে) এর পিছনের মূল বিষয়টি হ'ল সিরিয়ালাইজেশনকে সূচিতকারী ইভেন্টটি পাস করা, যদি কোনও ফর্মের মতো "জমা দিন" ইভেন্ট, বা একটি বোতামের "ক্লিক"। যদি কোনও ফর্মের জমা দেওয়ার জন্য একাধিক বোতাম থাকে, আপনি কেবল ইভেন্টটি ট্রিগারকারী বোতামটির মূল্যের জন্য অ্যাকাউন্ট করতে চান এবং অন্যদের উপেক্ষা করেন। আমি ডাম্পবেডমন্ডস.নেট
// supports IE8 and IE9
function serialize(form) {
var inputs = form.elements;
var array = [];
for(i=0; i < inputs.length; i++) {
var inputNameValue = inputs[i].name + '=' + inputs[i].value;
array.push(inputNameValue);
}
return array.join('&');
}
//using the serialize function written above
var form = document.getElementById("form");//get the id of your form. i am assuming the id to be named form.
var form_data = serialize(form);
var xhr = new XMLHttpRequest();
xhr.send(form_data);
//does not work with IE8 AND IE9
var form = document.querySelector('form');
var data = new FormData(form);
var xhr = new XMLHttpRequest();
xhr.send(data);
আমি @moison উত্তর থেকে এন্ট্রি ধরলাম থাকেন () formData পদ্ধতি থেকে MDN এটা যে বলা হয়ে থাকে:
ফর্মডাটা.এন্ট্রি () পদ্ধতিটি এই অবজেক্টটিতে থাকা সমস্ত কী / মান জোড়গুলির মধ্য দিয়ে যাওয়ার জন্য একটি পুনরাবৃত্তিকে ফেরত দেয়। প্রতিটি জুটির চাবি একটি ইউএসভিস্ট্রিং অবজেক্ট; মানটি হয় ইউএসভিস্ট্রিং, বা একটি ব্লব।
তবে একমাত্র সমস্যা হ'ল মোবাইল ব্রাউজার (অ্যান্ড্রয়েড এবং সাফারি সমর্থিত নয়) এবং আইই এবং সাফারি ডেস্কটপও
তবে মূলত আমার পদ্ধতির এখানে:
let theForm = document.getElementById("contact");
theForm.onsubmit = function(event) {
event.preventDefault();
let rawData = new FormData(theForm);
let data = {};
for(let pair of rawData.entries()) {
data[pair[0]] = pair[1];
}
let contactData = JSON.stringify(data);
console.warn(contactData);
//here you can send a post request with content-type :'application.json'
};
জাভাস্ক্রিপ্ট হ্রাস ফাংশন ব্যবহার করে আইআই 9> সহ সমস্ত ব্রাউজারের জন্য একটি কৌশল করা উচিত:
Array.prototype.slice.call(form.elements) // convert form elements to array
.reduce(function(acc,cur){ // reduce
var o = {type : cur.type, name : cur.name, value : cur.value}; // get needed keys
if(['checkbox','radio'].indexOf(cur.type) !==-1){
o.checked = cur.checked;
} else if(cur.type === 'select-multiple'){
o.value=[];
for(i=0;i<cur.length;i++){
o.value.push({
value : cur.options[i].value,
selected : cur.options[i].selected
});
}
}
acc.push(o);
return acc;
},[]);
লাইভ উদাহরণ নমুনা।
ডেভিড লেমন এর উত্তর উন্নতি।
এটি ফর্ম ডেটাটিকে JSON এ রূপান্তর করে এবং আপনাকে কোনও ডাটা অবজেক্ট থেকে ফর্ম সেট করতে দেয়।
const main = () => {
const form = document.forms['info'];
const data = {
"user_name" : "John",
"user_email" : "john@jonhson.com",
"user_created" : "2020-03-24",
"user_age" : 42,
"user_subscribed" : true,
"user_interests" : "sports",
"user_message" : "Hello My Friend"
};
populateForm(form, data);
updateJsonView(form);
form.addEventListener('change', (e) => updateJsonView(form));
}
const getFieldValue = (field, opts) => {
let type = field.getAttribute('type');
if (type) {
switch (type) {
case 'checkbox':
return field.checked;
case 'number':
return field.value.includes('.')
? parseFloat(field.value)
: parseInt(field.value, 10);
}
}
if (opts && opts[field.name] && opts[field.name].type) {
switch (opts[field.name].type) {
case 'int':
return parseInt(field.value, 10);
case 'float':
return parseFloat(field.value);
}
}
return field.value;
}
const setFieldValue = (field, value) => {
let type = field.getAttribute('type');
if (type) {
switch (type) {
case 'checkbox':
field.checked = value;
break;
default:
field.value = value;
break;
}
} else {
field.value = value;
}
}
const extractFormData = (form, opts) => {
return Array.from(form.elements).reduce((data, element) => {
return Object.assign(data, { [element.name] : getFieldValue(element, opts) });
}, {});
};
const populateForm = (form, data) => {
return Array.from(form.elements).forEach((element) => {
setFieldValue(element, data[element.name]);
});
};
const updateJsonView = (form) => {
let fieldOptions = {};
let formData = extractFormData(form, fieldOptions);
let serializedData = JSON.stringify(formData, null, 2);
document.querySelector('.json-view').textContent = serializedData;
};
main();
.form-field {
margin-bottom: 0.5em;
}
.form-field label {
display: inline-block;
font-weight: bold;
width: 7em;
vertical-align: top;
}
.json-view {
position: absolute;
top: 0.667em;
right: 0.667em;
border: thin solid grey;
padding: 0.5em;
white-space: pre;
font-family: monospace;
overflow: scroll-y;
max-height: 100%;
}
<form name="info" action="/my-handling-form-page" method="post">
<div class="form-field">
<label for="name">Name:</label>
<input type="text" id="name" name="user_name">
</div>
<div class="form-field">
<label for="mail">E-mail:</label>
<input type="email" id="mail" name="user_email">
</div>
<div class="form-field">
<label for="created">Date of Birth:</label>
<input type="date" id="created" name="user_created">
</div>
<div class="form-field">
<label for="age">Age:</label>
<input type="number" id="age" name="user_age">
</div>
<div class="form-field">
<label for="subscribe">Subscribe:</label>
<input type="checkbox" id="subscribe" name="user_subscribed">
</div>
<div class="form-field">
<label for="interests">Interest:</label>
<select required="" id="interests" name="user_interests">
<option value="" selected="selected">- None -</option>
<option value="drums">Drums</option>
<option value="js">Javascript</option>
<option value="sports">Sports</option>
<option value="trekking">Trekking</option>
</select>
</div>
<div class="form-field">
<label for="msg">Message:</label>
<textarea id="msg" name="user_message"></textarea>
</div>
</form>
<div class="json-view"></div>
এটি নিম্নলিখিত হিসাবে খুব সাধারণ ফাংশন দ্বারা করা যেতে পারে
function serialize(form) {
let requestArray = [];
form.querySelectorAll('[name]').forEach((elem) => {
requestArray.push(elem.name + '=' + elem.value);
});
if(requestArray.length > 0)
return requestArray.join('&');
else
return false;
}
serialized = serialize(document.querySelector('form'))
console.log(serialized);
<form>
<input type='text' name='fname' value='Johne'/>
<input type='text' name='lname' value='Doe'/>
<input type='text' name='contact[]' value='99999999'/>
<input type='text' name='contact[]' value='34423434345'/>
</form>
খাঁটি জাভাস্ক্রিপ্ট পদ্ধতিটি এখানে:
var form = document.querySelector('form');
var data = new FormData(form);
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
console.log(this.responseText);
}
};
xhttp.open("POST", "<YOUR-URL>", true);
xhttp.send(data);
}
document.serializeForm = function (selector) {
var dictionary = {};
var form = document.querySelector(selector);
var formdata = new FormData(form);
var done = false;
var iterator = formdata.entries();
do {
var prop = iterator.next();
if (prop.done && !prop.value) {
done = true;
}
else {
dictionary[prop.value[0]] = prop.value[1];
}
} while (!done);
return dictionary;
}
ডিবাগিং উদ্দেশ্যে এটি আপনাকে সহায়তা করতে পারে:
function print_form_data(form) {
const form_data = new FormData(form);
for (const item of form_data.entries()) {
console.log(item);
}
return false;
}
আমি পাগল হতে পারি তবে আমি এই উত্তরগুলি গুরুতরভাবে ফুলে উঠছি। এখানে আমার সমাধান
function serialiseForm(form) {
var input = form.getElementsByTagName("input");
var formData = {};
for (var i = 0; i < input.length; i++) {
formData[input[i].name] = input[i].value;
}
return formData = JSON.stringify(formData);
}
select
এবং সমস্ত