এই জাতীয় এইচটিএমএল ফর্মগুলি বাসা বাঁধাই কি সম্ভব?
<form name="mainForm">
<form name="subForm">
</form>
</form>
যাতে উভয় ফর্ম কাজ করে? আমার বন্ধুটির subForm
কাজগুলির একটি অংশ এটির সাথে সমস্যা করছে, যদিও এর অন্য অংশটি তা করে না।
এই জাতীয় এইচটিএমএল ফর্মগুলি বাসা বাঁধাই কি সম্ভব?
<form name="mainForm">
<form name="subForm">
</form>
</form>
যাতে উভয় ফর্ম কাজ করে? আমার বন্ধুটির subForm
কাজগুলির একটি অংশ এটির সাথে সমস্যা করছে, যদিও এর অন্য অংশটি তা করে না।
উত্তর:
এক কথায়, না। আপনার একটি পৃষ্ঠায় বেশ কয়েকটি ফর্ম থাকতে পারে তবে সেগুলি বাসা বাঁধে না।
থেকে HTML5 পরিশ্রমী খসড়া :
4.10.3
form
উপাদানসামগ্রী মডেল:
প্রবাহিত সামগ্রী, তবে কোনও ফর্ম উপাদান বংশধর নেই।
আমি একটি অনুরূপ সমস্যার মধ্যে দৌড়েছি, এবং আমি জানি যে এটি প্রশ্নের উত্তর নয়, তবে এটি এই ধরণের সমস্যায় আক্রান্ত ব্যক্তির পক্ষে সহায়ক হতে পারে:
যদি একটি নির্দিষ্ট ক্রমে দুটি বা আরও বেশি ফর্মের উপাদানগুলি রাখার প্রয়োজন হয় , HTML5 এর <input> form
অ্যাট্রিবিউট সমাধান হতে পারে। Http://www.w3schools.com/tags/att_input_form.asp
থেকে :
- HTML5 এ ফর্মের বৈশিষ্ট্যটি নতুন।
<form>
কোন<input>
উপাদানটির সাথে সম্পর্কিত তা নির্দিষ্ট করে। এই বৈশিষ্ট্যের মান অবশ্যই<form>
একই নথির কোনও উপাদানের আইডি বৈশিষ্ট্য হতে হবে ।
পরিস্থিতি :
বাস্তবায়ন :
<form id="Form1" action="Action1.php" method="post"></form>
<form id="Form2" action="Action2.php" method="post"></form>
<input type="text" name="input_Form1_n1" form="Form1" />
<input type="text" name="input_Form2_n1" form="Form2" />
<input type="text" name="input_Form1_n2" form="Form1" />
<input type="text" name="input_Form2_n2" form="Form2" />
<input type="submit" name="button1" value="buttonVal1" form="Form1" />
<input type="submit" name="button2" value="buttonVal2" form="Form2" />
এখানে আপনি ব্রাউজারের সামঞ্জস্য পাবেন।
<input type="submit"
এটির সাথে লিঙ্কযুক্ত <form>
যা একটি নির্দিষ্ট করে action
, <input />
সেইগুলির সাথে লিঙ্কযুক্ত (গুলি) <form>
সেই অনুরোধে ব্যবহৃত হবে
দ্বিতীয় ফর্মটি উপেক্ষা করা হবে, উদাহরণস্বরূপ ওয়েবকিট থেকে স্নিপেট দেখুন :
bool HTMLParser::formCreateErrorCheck(Token* t, RefPtr<Node>& result)
{
// Only create a new form if we're not already inside one.
// This is consistent with other browsers' behavior.
if (!m_currentFormElement) {
m_currentFormElement = new HTMLFormElement(formTag, m_document);
result = m_currentFormElement;
pCloserCreateErrorCheck(t, result);
}
return false;
}
সাধারণ এইচটিএমএল আপনাকে এটি করার অনুমতি দিতে পারে না। তবে জাভাস্ক্রিপ্টের সাহায্যে আপনি এটি করতে সক্ষম হবেন। আপনি যদি জাভাস্ক্রিপ্ট / jquery ব্যবহার করে থাকেন তবে আপনি নিজের ফর্ম উপাদানগুলি একটি শ্রেণীর সাথে শ্রেণিবদ্ধ করতে পারেন এবং তারপরে আপনার জমা দিতে চান এমন আইটেমগুলির সাবসেটের জন্য কেবল সেই ফর্ম উপাদানগুলিকেই সিরিয়ালাইজ করতে সিরিয়ালাইজ () ব্যবহার করতে পারেন।
<form id="formid">
<input type="text" class="class1" />
<input type="text" class="class2">
</form>
তারপরে আপনার জাভাস্ক্রিপ্টে আপনি ক্লাস 1 উপাদানগুলি ক্রমিক করতে এটি করতে পারেন
$(".class1").serialize();
Class2 এর জন্য আপনি করতে পারেন
$(".class2").serialize();
পুরো ফর্ম জন্য
$("#formid").serialize();
বা সহজভাবে
$("#formid").submit();
যদি আপনি অ্যাংুলারজেএস ব্যবহার করে থাকেন তবে আপনার <form>
অভ্যন্তরের কোনও ট্যাগ ng-app
রানটাইমে ngForm
নেস্ট করার জন্য নকশাকৃত নির্দেশাবলীর সাথে প্রতিস্থাপন করা হবে।
কৌনিক আকারে বাসা বাঁধতে পারে। এর অর্থ হ'ল বাইরের ফর্মটি বৈধ হয় যখন সমস্ত শিশু ফর্মও বৈধ হয়। যাইহোক, ব্রাউজারগুলি
<form>
উপাদানগুলির বাসা বাঁধার অনুমতি দেয় না , সুতরাং কৌণিক একটিngForm
নির্দেশনা সরবরাহ করে যা অনুরূপ আচরণ করে তবে বাসা<form>
বেঁধে দেওয়া যায়। এটি আপনাকে নেস্টেড ফর্মগুলি রাখার অনুমতি দেয় যা ডায়রেক্টিভের সাহায্যে গতিশীলভাবে উত্পাদিত ফর্মগুলিতে কৌনিক বৈধতা নির্দেশাবলী ব্যবহার করার সময় খুব কার্যকরngRepeat
। ( উত্স )
২০১২ সালের হিসাবে আমি এই প্রশ্নের একটি আপডেট উত্তর দিতে চাই। নেস্টেড ফর্মগুলির মতো একই ফলাফল অর্জন করা সম্ভব তবে তাদের বাসা ছাড়াই। এইচটিএমএল 5 ফর্মের বৈশিষ্ট্যটি প্রবর্তন করেছে। নির্দিষ্ট ফর্ম উপাদান (আইডি দ্বারা) এর সাথে লিঙ্ক করতে আপনি ফর্মের বাইরে ফর্ম নিয়ন্ত্রণগুলিতে ফর্ম বৈশিষ্ট্য যুক্ত করতে পারেন।
https://www.impressivewebs.com/html5-form-attribute/
আপনি এইভাবে আপনার এইচটিএমএল গঠন করতে পারেন:
<form id="main-form" action="/main-action" method="post"></form>
<form id="sub-form" action="/sub-action" method="post"></form>
<div class="main-component">
<input type="text" name="main-property1" form="main-form" />
<input type="text" name="main-property2" form="main-form" />
<div class="sub-component">
<input type="text" name="sub-property1" form="sub-form" />
<input type="text" name="sub-property2" form="sub-form" />
<input type="submit" name="sub-save" value="Save" form="sub-form" />
</div>
<input type="submit" name="main-save" value="Save" form="main-form" />
</div>
ফর্ম বৈশিষ্ট্যটি সমস্ত আধুনিক ব্রাউজার দ্বারা সমর্থিত। আইই এটি সমর্থন করে না তবে আইই আর ব্রাউজার নয়, বরং এটি একটি সামঞ্জস্যের সরঞ্জাম, যেমন মাইক্রোসফ্ট নিজেই নিশ্চিত করেছে: https://www.zdnet.com/article/microsoft-security-chief-ie-is-not-a আপনার ব্রাউজার-হিসাবে-ব্রাউজারটি-তাই-বন্ধ-এটি-ব্যবহার-বন্ধ করুন । আমরা IE এ জিনিসগুলি তৈরির বিষয়ে যত্ন নেওয়া বন্ধ করার প্রায় সময়।
https://caniuse.com/#feat=form-attribute https://html.spec.whatwg.org/multipage/form-control-inf بُ. h ার. html# attr- fae-
form
এইচটিএমএল স্পেস থেকে:
এই বৈশিষ্ট্যটি লেখককে নেস্টেড ফর্ম উপাদানগুলির সমর্থনের অভাবকে ঘিরে কাজ করার অনুমতি দেয়।
এই সমস্যাটি ঘুরে দেখার আরও একটি উপায়, আপনি যদি কোনও সার্ভার সাইড স্ক্রিপ্টিং ভাষা ব্যবহার করেন যা আপনাকে পোস্ট করা ডেটা ম্যানিপুলেট করার অনুমতি দেয়, তা হল আপনার এইচটিএমএল ফর্মটি এভাবে ঘোষণা করা:
<form>
<input name="a_name"/>
<input name="a_second_name"/>
<input name="subform[another_name]"/>
<input name="subform[another_second_name]"/>
</form>
আপনি যদি পোস্ট করা ডেটা মুদ্রণ করেন (আমি এখানে পিএইচপি ব্যবহার করব), আপনি এর মতো একটি অ্যারে পাবেন:
//print_r($_POST) will output :
array(
'a_name' => 'a_name_value',
'a_second_name' => 'a_second_name_value',
'subform' => array(
'another_name' => 'a_name_value',
'another_second_name' => 'another_second_name_value',
),
);
তারপরে আপনি ঠিক এর মতো কিছু করতে পারেন:
$my_sub_form_data = $_POST['subform'];
unset($_POST['subform']);
আপনার $ _POST- এ এখন কেবলমাত্র আপনার "মূল ফর্ম" ডেটা রয়েছে এবং আপনার সাবফর্ম ডেটা অন্য ভেরিয়েবলে সঞ্চিত থাকে আপনি ইচ্ছায় হেরফের করতে পারেন।
আশাকরি এটা সাহায্য করবে!
ক্রেগ যেমন বলেছিল, না।
তবে, কেন আপনার মন্তব্য সম্পর্কে :
<form>
ইনপুট এবং "আপডেট" বোতামের সাহায্যে 1 ব্যবহার করা আরও সহজ হতে পারে এবং অন্যের "অর্ডার জমা দিন" বোতামের সাথে অনুলিপিযুক্ত লুকানো ইনপুটগুলি ব্যবহার করতে পারেন <form>
।
দ্রষ্টব্য, আপনাকে ফর্ম উপাদানগুলিকে বাসা করার অনুমতি নেই!
http://www.w3.org/MarkUp/html3/forms.html
https://www.w3.org/TR/html4/appendix/changes.html#hA.3.9 (এইচটিএমএল 4 স্পেসিফিকেশন 3.2 থেকে 4 এর নেস্টিং ফর্ম সম্পর্কিত কোনও পরিবর্তন নোট করে)
https://www.w3.org/TR/html4/appendix/changes.html#hA.1.1.12 (এইচটিএমএল 4 স্পেসিফিকেশন নেস্টিং ফর্মগুলির সাথে 4.0 থেকে 4.1 পর্যন্ত কোনও পরিবর্তন নোট করে)
https://www.w3.org/TR/html5-diff/ (এইচটিএমএল 5 স্পেসিফিকেশন 4 থেকে 5 এর নীড় ফর্ম সম্পর্কিত কোনও পরিবর্তন নোট করে)
https://www.w3.org/TR/html5/forms.html#association-of-controls- and- forms- এ মন্তব্য করা হয়েছে "এই বৈশিষ্ট্যটি লেখককে নেস্টেড ফর্ম উপাদানগুলির সমর্থনের অভাবকে ঘিরে কাজ করতে দেয়" " এটি নির্দিষ্ট করা হয়েছে যেখানে উদ্ধৃত করা হয়নি, আমি মনে করি তারা ধরে নিচ্ছে যে আমাদের ধরে নেওয়া উচিত যে এটি html3 নির্দিষ্টকরণে নির্দিষ্ট করা হয়েছে :)
আপনি বোতাম ট্যাগের মধ্যে গঠন = "" ব্যবহার করতে পারেন।
<button type="submit" formaction="/rmDog" method='post' id="rmDog">-</button>
এটি আলাদা বোতাম হিসাবে মূল আকারে নেস্ট করা হবে।
যদিও আমি নেস্টেড ফর্মগুলির জন্য কোনও সমাধান উপস্থাপন করি না (এটি নির্ভরযোগ্যভাবে কাজ করে না), আমি আমার জন্য কাজ করে এমন একটি কাজের উপস্থাপনা করছি:
ব্যবহারের দৃশ্য: একটি সুপারফর্ম একবারে এন আইটেম পরিবর্তন করতে দেয়। এর নীচে একটি "জমা দিন" বোতাম রয়েছে। "আইটেম জমা দিন # এন" বোতামের সাথে প্রতিটি আইটেমের নিজস্ব নেস্টেড ফর্ম থাকতে চায়। কিন্তু পারি না ...
এই ক্ষেত্রে, কেউ আসলে একটি একক ফর্ম ব্যবহার করতে পারে, এবং তারপরে বোতামগুলির নামটি হতে পারে submit_1
.. submit_N
এবং submitAll
এটি সার্ভার-সাইড হ্যান্ডেল করে, কেবলমাত্র _1
বোতামটির নাম ছিল কিনা তা শেষ হওয়া প্যারামগুলি দেখে submit_1
।
<form>
<div id="item1">
<input type="text" name="foo_1" value="23">
<input type="submit" name="submit_1" value="Submit Item #1">
</div>
<div id="item2">
<input type="text" name="foo_2" value="33">
<input type="submit" name="submit_2" value="Submit Item #2">
</div>
<input type="submit" name="submitAll" value="Submit All Items">
</form>
ঠিক আছে, আবিষ্কারের তেমন কিছু নয়, তবে এটি কাজটি করে।
বাসা বাঁধার ফর্মগুলি সম্পর্কে: আমি একটি বিকেলে একটি এজ্যাক স্ক্রিপ্ট ডিবাগ করার চেষ্টা করে 10 বছর কাটিয়েছি।
আমার আগের উত্তর / উদাহরণটি এইচটিএমএল মার্কআপের জন্য অ্যাকাউন্ট করে নি, দুঃখিত।
<form id='form_1' et al>
<input stuff>
<submit onClick='ajaxFunction(That_Puts_form_2_In_The_ajaxContainer)' >
<td id='ajaxContainer></td>
</form>
form_2 অবৈধ ফর্ম_2 বলার ক্ষেত্রে ক্রমাগত ব্যর্থ।
আমি যখন form_1 <i>outside</i>
এর form2 তৈরি করে এজ্যাক্স কনটেইনার স্থানান্তরিত হয়েছিলাম, তখন আমি আবার ব্যবসায়ে ফিরে এসেছি। এটি কেন বাসা বাঁধতে পারে এই প্রশ্নের উত্তর। আমি বলতে চাইছি, আসলে, কোন ফর্মটি ব্যবহার করতে হবে তা নির্ধারণ না করে আইডি কী? চারপাশে আরও ভাল, চটজলদি কাজ থাকতে হবে।
আপনার নেস্টেড ফর্মের আগে খালি ফর্ম ট্যাগটি ব্যবহার করুন
ফায়ারফক্স, ক্রোমে পরীক্ষিত এবং কাজ করেছে
আইই পরীক্ষিত নয়
<form name="mainForm" action="mainAction">
<form></form>
<form name="subForm" action="subAction">
</form>
</form>
যদিও প্রশ্নটি বেশ পুরানো এবং আমি @ প্রত্যেকের সাথে একমত যে এইচটিএমএলে ফর্মের বাসা বাঁধার অনুমতি নেই
তবে এটি কিছু এটি দেখতে চাইবে
যেখানে আপনি হ্যাক করতে পারেন (আমি এটি হ্যাক বলছি যেহেতু আমি নিশ্চিত যে এটি বৈধ নয়) এইচটিএমএলটি ব্রাউজারকে বাসা বেঁধে রাখতে দেয়
<form id="form_one" action="http://apple.com">
<div>
<div>
<form id="form_two" action="/">
<!-- DUMMY FORM TO ALLOW BROWSER TO ACCEPT NESTED FORM -->
</form>
</div>
<br/>
<div>
<form id="form_three" action="http://www.linuxtopia.org/">
<input type='submit' value='LINUX TOPIA'/>
</form>
</div>
<br/>
<div>
<form id="form_four" action="http://bing.com">
<input type='submit' value='BING'/>
</form>
</div>
<br/>
<input type='submit' value='Apple'/>
</div>
</form>
জেএস ফিডল লিঙ্ক
না আপনার নেস্টেড ফর্ম থাকতে পারে না। পরিবর্তে আপনি এমন একটি মডেল খুলতে পারেন যাতে ফর্ম রয়েছে এবং এজ্যাক্স ফর্ম জমাটি সম্পাদন করতে পারেন।
সত্যিই সম্ভব নয় ... আমি ফর্ম ট্যাগগুলি বাসাতে পারি না ... তবে আমি এই কোডটি ব্যবহার করেছি:
<form>
OTHER FORM STUFF
<div novalidate role="form" method="post" id="fake_form_id_0" data-url="YOUR_POST_URL">
THIS FORM STUFF
</div>
</form>
সঙ্গে {% csrf_token %}
এবং স্টাফ
এবং কিছু জেএস প্রয়োগ করেছেন
var url = $(form_id).attr("data-url");
$.ajax({
url: url,
"type": "POST",
"data": {
'csrfmiddlewaretoken': '{{ csrf_token }}',
'custom-param-attachment': 'value'
},
success: function (e, data) {
if (e.is_valid) {
DO STUFF
}
}
});
আজ, আমিও একই ইস্যুতে আটকে গিয়েছি এবং আমি কোনও ব্যবহারকারীর নিয়ন্ত্রণ যুক্ত করেছি এবং
এই নিয়ন্ত্রণে আমি এই কোডটি ব্যবহার করি তা সমাধান করুন
<div class="divformTagEx">
</div>
<asp:Literal runat="server" ID="litFormTag" Visible="false">
'<div> <form style="margin-bottom: 3;" action="http://login.php" method="post" name="testformtag"></form> </div>'</asp:Literal>
এবং পৃষ্ঠার PreRenderComplete ইভেন্টে এই পদ্ধতিটি কল করুন
private void InitializeJavaScript()
{
var script = new StringBuilder();
script.Append("$(document).ready(function () {");
script.Append("$('.divformTagEx').append( ");
script.Append(litFormTag.Text);
script.Append(" )");
script.Append(" });");
ScriptManager.RegisterStartupScript(this, GetType(), "nestedFormTagEx", script.ToString(), true);
}
আমি বিশ্বাস করি এটি সাহায্য করবে।
আমি জানার আগে আমার এটি করার কথা ছিল না আমি একাধিক জমা বোতাম দেওয়ার উদ্দেশ্যে ফর্ম নেস্ট করেছি। 18 মাস ধরে হাজার হাজার সাইনআপ লেনদেন চালিয়ে যান, কেউ আমাদের কোনও অসুবিধা সম্পর্কে ডাকেনি।
নেস্টেড ফর্মগুলি সঠিক পদক্ষেপ গ্রহণের জন্য বিশ্লেষণের জন্য আমাকে একটি আইডি দিয়েছে। ভাঙি না ততক্ষণ আমি বোতামগুলির মধ্যে একটিতে একটি ক্ষেত্র সংযুক্ত করার চেষ্টা করেছি এবং ভ্যালিডেট অভিযোগ করেছে। এটি আনুগত্যিত করার পক্ষে খুব বড় কথা ছিল না - আমি বাহ্যিক ফর্মের উপর একটি স্পষ্টভাবে স্ট্রিংফাইটি ব্যবহার করেছি যাতে এটি জমা দেওয়ার এবং ফর্মটির সাথে মেলে না। হ্যাঁ, হ্যাঁ, একটি অনক্লিকের কাছে জমা দেওয়া থেকে বোতামগুলি নেওয়া উচিত ছিল।
পয়েন্টটি এমন পরিস্থিতিতে আছে যেখানে এটি সম্পূর্ণরূপে ভেঙে যায় না। তবে "সম্পূর্ণরূপে ভাঙ্গা নয়" সম্ভবত এটির জন্য খুব কম মানের :-)