Html फॉर्म टैग का उद्देश्य क्या है


104

मुझे html में फॉर्म टैग का उद्देश्य समझ नहीं आ रहा है।

मैं आसानी से फॉर्म टैग का उपयोग किए बिना किसी भी इनपुट प्रकार का आसानी से उपयोग कर सकता हूं। यह लगभग इसे आदानों के चारों ओर लपेटने के लिए बेमानी लगता है।

इसके अतिरिक्त, अगर मैं सर्वर-साइड पेज पर कॉल करने के लिए ajax का उपयोग कर रहा हूं, तो मैं बस इसके लिए jQuery का उपयोग कर सकता हूं। एकमात्र अपवाद यह है कि मैंने देखा कि आपको किसी कारण के लिए एक प्रपत्र टैग के चारों ओर अपलोड स्क्रिप्ट लपेटनी होगी।

तो पाठ इनपुट जैसी सरल चीजों के लिए अभी भी रूपों का व्यापक रूप से उपयोग क्यों किया जाता है? यह एक बहुत ही पुरातन और अनावश्यक चीज़ लगती है।

मुझे अभी इसके लिए लाभ या आवश्यकता नहीं दिख रही है। शायद मुझे कुछ याद आ रहा है।


Html <form> टैग के बिना आप अपने फ़ॉर्म के लिए क्रिया और विधि को कैसे परिभाषित करते हैं?
डारियन

3
अगर मैं इसे jQuery में करना चाहता था, तो मैं बटन पर क्लिक () फ़ंक्शन का उपयोग करूंगा और इसके अंदर मैं ajax () फ़ंक्शन का उपयोग करूंगा। मेरी राय में कोड पढ़ने के लिए बहुत सरल और आसान। और मैं सरल जावास्क्रिप्ट के साथ पृष्ठ को आसानी से ताज़ा कर सकता हूं
डी-मार्क

23
मुझे आश्चर्य है कि इस प्रश्न ने नीचे उतर दिया। मैं पूरी तरह से इस googled।
dwjohnston

2
@dwjohnston आपको यहां नया होना चाहिए ...
स्टेफानो बोरिनी

3
बड़ा अच्छा सवाल! अन्य कारणों से मुझे प्रपत्रों का उपयोग करना पसंद नहीं है, इसमें यह तथ्य शामिल है कि यह आपके पृष्ठ संरचना को सीमित करता है (क्योंकि आपके पास प्रपत्रों के अंदर प्रपत्र नहीं हो सकते हैं), कुछ क्रमांकन इस तथ्य की तरह है कि चेकबॉक्स को अनदेखा किया जाएगा यदि चेक नहीं किया गया है (जिसका अर्थ है कि मैं अक्सर समाप्त करता हूं मैन्युअल रूप से सबमिट डेटा तैयार करना), और क्योंकि HTML मौलिक रूप से पृष्ठ की सामग्री और संरचना है, जबकि JS गतिशीलता है। जेएस की नौकरी पर फॉर्म एलिमेंट थोड़े ओवरलैप हो रहे हैं, और मुझे अपने पेज स्ट्रक्चर्ड करना पसंद है।
3snoW

जवाबों:


89

आप जो याद कर रहे हैं वह सिमेंटिक मार्कअप , और DOM की समझ है ।

वास्तविक रूप से, आप HTML5 मार्कअप के साथ जो चाहें कर सकते हैं, और बहुत सारे ब्राउज़र इसे पार्स करेंगे। पिछली बार मैंने जाँच की, वेबकिट / Blink भी अनुमति देता है अंदर छद्म तत्वों <input>तत्वों , जो कल्पना का स्पष्ट उल्लंघन है - छिपकली इतना नहीं। हालाँकि, आपको अपने मार्कअप के साथ जो कुछ भी करना है वह निस्संदेह इसे अमान्य कर देगा जहां तक ​​शब्दार्थ का संबंध है।

हम <input>तत्वों को अंदर क्यों डालते <form>हैं? उसी कारण से हम <li>टैग को अंदर रखते हैं <ul>और <ol>तत्व - यह वह जगह है जहाँ वे हैं। यह शब्दार्थ है सही है, और मार्कअप को परिभाषित करने में मदद करता है। पार्सर्स, स्क्रीन रीडर, और विभिन्न सॉफ्टवेयर आपके मार्कअप को तब बेहतर ढंग से समझ सकते हैं जब यह शब्दार्थ सही हो - जब मार्कअप का अर्थ होता है, न कि केवल संरचना।

<form>तत्व भी आप को परिभाषित करने की अनुमति देता है methodऔर actionजिम्मेदार बताते हैं, जो ब्राउज़र क्या जब फ़ॉर्म सबमिट किया जाता करने के लिए बताओ। AJAX एक 100% कवरेज उपकरण नहीं है, और एक वेब डेवलपर के रूप में आपको सुशोभित गिरावट का अभ्यास करना चाहिए - प्रपत्र सबमिट किए जाने में सक्षम होना चाहिए, और जेएस के बंद होने पर भी डेटा स्थानांतरित किया जाना चाहिए।

अंत में, सभी डोम में ठीक से पंजीकृत हैं। हम जावास्क्रिप्ट के साथ इस पर एक नज़र डाल सकते हैं। यदि आप इस पृष्ठ पर अपना कंसोल खोलते हैं, और टाइप करें:

document.forms

आपको पृष्ठ पर सभी रूपों का एक अच्छा संग्रह मिलेगा। सर्चबार, टिप्पणी बॉक्स, उत्तर बॉक्स - सभी उचित रूप। यह इंटरफ़ेस जानकारी तक पहुंचने और इन तत्वों के साथ बातचीत करने के लिए उपयोगी हो सकता है। उदाहरण के लिए, रूपों को बहुत आसानी से क्रमबद्ध किया जा सकता है ।

यहाँ कुछ पढ़ने की सामग्री है:

नोट: <input>तत्वों का उपयोग प्रपत्रों के बाहर किया जा सकता है, लेकिन यदि आपका इरादा किसी भी तरह से डेटा जमा करने का है, तो आपको फ़ॉर्म का उपयोग करना चाहिए।


यह उस उत्तर का हिस्सा है जहां मैं प्रश्न को चारों ओर घुमाता हूं।

मैं रूपों से बचकर अपने जीवन को कठिन कैसे बना रहा हूं?

सबसे पहले और सबसे महत्वपूर्ण - कंटेनर तत्व। कौन जरूरत है उन्हें, सही ?!

निश्चित रूप से आपके छोटे <input>और <button>तत्वों को किसी प्रकार के कंटेनर तत्व के अंदर घोंसला किया जाता है? वे अभी बाकी चीजों के बीच में नहीं घूम सकते। तो अगर नहीं <form>, तो क्या? ए <div>? ए <span>?

इन तत्वों को कहीं न कहीं निवास करना पड़ता है, और जब तक आपका मार्कअप एक पागल गड़बड़ है तब तक कंटेनर तत्व बस एक रूप हो सकता है।

नहीं? ओह।

इस बिंदु पर मेरे सिर में आवाज़ें बहुत उत्सुक हैं कि आप इन सभी अलग-अलग AJAX स्थितियों के लिए अपने ईवेंट हैंडलर कैसे बनाते हैं। बहुत कुछ होना चाहिए, अगर आपको बाइट्स बचाने के लिए अपने मार्कअप में कटौती करने की आवश्यकता है। फिर आपको प्रत्येक AJAX घटना के लिए कस्टम फ़ंक्शंस बनाने होंगे जो तत्वों के प्रत्येक 'सेट' से मेल खाती है - जिसे आपको व्यक्तिगत रूप से या कक्षाओं के साथ लक्षित करना होगा, है ना? वास्तव में इन तत्वों को उदारतापूर्वक समूहित करने का कोई तरीका नहीं है, क्योंकि हमने स्थापित किया है कि वे मार्कअप के चारों ओर घूमते हैं, जो भी तब तक करते हैं जब तक कि उन्हें ज़रूरत न हो।

तो आप कुछ हैंडलर कस्टम कोड करते हैं।

$('#searchButton').on('click', function (e) {
  e.preventDefault();

  var search = $('#mySearch');

  $.ajax({
    url: 'http://example.com/text',
    type: 'GET',
    dataType: 'text',
    data: 'query=' + search.val(),
    success: function (data) {
      console.log(data);
    }
  });
});


$('#login').on('click', function (e) {
  e.preventDefault();
  var user = $('#username'),
      pass = $('#password'),
      rem = $('#remember');
  
  $.ajax({
    url: 'http://example.com/login',
    type: 'POST',
    data: user.add(pass, rem).serialize(),
    dataType: 'text',
    success: function (data) {
      console.log(data);
    }
  });
});
<!-- No containers, extra markup is silly. -->

<input type="text" id="mySearch" value="query" />
<button id="searchButton">Search</button>
<input type="text" id="username" name="username" value="user" />
<input type="password" id="password" name="password" value="pass" />
<input type="checkbox" id="remember" name="remember" checked /> stay logged in
<button id="login">Login</button>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>

यह वह भाग है जहाँ आप कुछ कहते हैं:

हालांकि मैं पूरी तरह से पुन: प्रयोज्य कार्यों का उपयोग करता हूं। अतिरंजना बंद करो। '

उचित पर्याप्त है, लेकिन आपको अभी भी अद्वितीय तत्वों, या लक्ष्य वर्ग सेटों के इन सेटों को बनाने की आवश्यकता है, है ना? आपको अभी भी इन तत्वों को किसी तरह समूह बनाना है

मुझे अपनी आंखें (या कान, अगर आप एक स्क्रीन रीडर का उपयोग कर रहे हैं और कुछ सहायता की आवश्यकता है - मुझे उधार दें - अच्छी बात है कि हम इस सभी शब्दार्थ मार्कअप में कुछ ARIA जोड़ सकते हैं , ठीक है?), और सामान्य रूप की शक्ति को निहारना।

function genericAjaxForm (e) {
  e.preventDefault();
  var form = $(this);
  
  return $.ajax({
    url: form.attr('action'),
    type: form.attr('method'),
    dataType: form.data('type'),
    data: form.serialize()
  });
}

$('#login-form').on('submit', function (e) {
  genericAjaxForm.call(this, e).done(function (data) {
    console.log(data);
  });
});
<form action="http://example.com/login" method="POST" data-type="text" id="login-form">
  <input type="text" name="username" value="user" />
  <input type="password" name="password" value="mypass" />
  <label>
    <input type="checkbox" name="remember" /> Remember me
  </label>

  <button type="submit">Login</button>
</form>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>

हम किसी भी सामान्य रूप के साथ इसका उपयोग कर सकते हैं, हमारे सुंदर गिरावट को बनाए रख सकते हैं, और फॉर्म को पूरी तरह से वर्णन करते हैं कि यह कैसे कार्य करना चाहिए। हम एक सामान्य शैली रखते हुए इस बेस कार्यक्षमता पर विस्तार कर सकते हैं - अधिक मॉड्यूलर, कम सिरदर्द। जावास्क्रिप्ट केवल अपनी चीजों के बारे में चिंता करता है, जैसे कि उपयुक्त तत्वों को छिपाना, या हमें मिलने वाली किसी भी प्रतिक्रिया को संभालना।

और अब आप कहते हैं:

'लेकिन मैं अपने छद्म रूपों को उन <div>तत्वों में लपेटता हूं जिनमें विशिष्ट आईडी हैं - मैं तब के साथ .findऔर .serializeउनके साथ शिथिलता से इनपुट को लक्षित कर सकता हूं, और ...'

ओह, वह क्या है? आप वास्तव में अपने <input>तत्वों को एक कंटेनर में लपेटते हैं ?

तो यह अभी तक एक रूप क्यों नहीं है?


2
यह सभी रूपों पर एक नज़र रखने के साथ एक अच्छा बिंदु है। मैं देख सकता हूं कि इसे एक लाभ के रूप में क्यों देखा जाएगा। इसके अलावा, आप यह क्यों कहते हैं कि इनपुट का उपयोग किसी प्रपत्र के अंदर किया जाना चाहिए? यह कोई वास्तविक लाभ प्रदान करने के लिए प्रतीत नहीं होता है। केवल अतिरिक्त कोड। मैंने कभी भी कुछ भी ऑनलाइन नहीं पढ़ा है जो कहता है कि इनपुट को प्रपत्रों के बाहर रखना गलत है, इसलिए मुझे नहीं लगता है कि इसकी तुलना ओल्स और ओल्स से करना उचित है। और वास्तव में, मैं कभी नहीं चाहूंगा कि कोई भी मेरी वेबसाइटों का उपयोग करे अगर उनके पास जावास्क्रिप्ट बंद हो गया है। इसके अलावा, जो शायद केवल 1% उपयोगकर्ताओं के लिए ऑनलाइन खाता होगा।
डी-मार्क

2
कम लगता है जैसे आप एक उत्तर की तलाश कर रहे हैं कि हम <form>तत्वों का उपयोग क्यों करते हैं, और अधिक जैसे आप अपने स्वयं के मार्कअप विकल्पों की पुष्टि करने की कोशिश कर रहे हैं। यह ठीक है, जैसे मैं ने कहा, तुम क्या करने के लिए स्वतंत्र हैं जो कुछ भी अपने मार्कअप के साथ की तरह आप, लेकिन मैं है मुख्य कारण हम डेवलपर्स रूपों का उपयोग समझाया।
ओका

2
शानदार अंक बनाए। मैं वास्तव में इस तथ्य की सराहना करता हूं कि आपने अपने उत्तर को अधिक विस्तृत करने और वास्तविक कोड उदाहरण प्रदान करने के लिए समय लिया। मैं रूपों को एक और कोशिश दूंगा और यह देखना चाहूंगा कि क्या मुझे ऐसा करना पसंद है। मदद के लिए एक बार फिर से धन्यवाद। हालाँकि, क्या आपको नहीं लगता कि केवल एक टेक्स्ट बॉक्स के चारों ओर एक फ़ॉर्म लपेटना व्यर्थ है?
डी-मार्क

संदर्भ पर निर्भर करता है। एक इनपुट जो कभी भी सीधे सबमिट नहीं होता है , जैसे कि एक खोज बॉक्स जो एपीआई समापन बिंदु को विशेष रूप से AJAX के अलावा अन्य घटनाओं के माध्यम से बताता है submit, इसे एक ऐसे फॉर्म में लपेटा जा सकता है क्योंकि इसमें जावास्क्रिप्ट के बिना कोई कार्यक्षमता नहीं होगी । यह अवैध मार्कअप नहीं <input>है <form>, जो कि संभवतः खराब शब्दार्थ से बाहर है। अगर वहाँ एक रास्ता है कि डेटा AJAX के बिना प्रस्तुत किया जा सकता है, एक उचित submitघटना के साथ, एक फार्म शायद सबसे अच्छा है। फिर से, तत्व को कंटेनर की आवश्यकता होती है, और <form>तत्व डिफ़ॉल्ट रूप से ब्लॉक स्तर होते हैं, इसलिए वे ए की तरह कार्य करते हैं <div>
ओका

5

यदि आप AJAX (जो विकास के शुरुआती चरणों में उपयोगी हो सकते हैं) के बिना फॉर्म जमा करने में सक्षम होना चाहते हैं, तो फॉर्म टैग अभी भी आवश्यक हैं। लेकिन भले ही फॉर्म टैग के बिना डेटा सबमिट करने के लिए जावास्क्रिप्ट का उपयोग करना संभव हो, लेकिन कुछ लाभ अभी भी दिमाग में आते हैं:

  1. फ़ॉर्म टैग का उपयोग करके लोगों को आपके इरादों को दिखाते हुए, कुछ मामलों में आपको कोड पढ़ने और समझने में मदद मिल सकती है।
  2. 'सबमिट' विधि रूपों पर उपलब्ध है। यदि आपके पास एक इनपुट के साथ एक फॉर्म है [टाइप करें = सबमिट करें], और यह अक्षम नहीं है, तो जब कोई व्यक्ति किसी अन्य फॉर्म के इनपुट को भरते समय 'एंटर' करता है, तो फॉर्म सबमिट हो जाएगा। आप इनपुट तत्वों पर 'कीडाउन' ईवेंट के लिए सुनकर भी ऐसा कर सकते हैं, लेकिन यह ui का एक अच्छा हिस्सा है जो आपको फॉर्म टैग के साथ मुफ्त में मिलता है।
  3. कुछ अन्य चीजें हैं जो केवल फॉर्म टैग के साथ काम करती हैं, या फ़ॉर्म टैग के साथ आसान हैं। डेवलपर्स अंततः इन मामलों में भाग लेंगे, और यह तय करना आसान होगा कि हमेशा हर जगह उनका उपयोग करें और समस्याओं से बचें। वास्तव में, असली सवाल यह है कि फॉर्म टैग का उपयोग क्यों न किया जाए ?

इसके अलावा, jQuery का सामान .serialize()केवल फॉर्म एलिमेंट्स पर काम करता है।
EJTH

0

HTML तत्व एक दस्तावेज़ अनुभाग का प्रतिनिधित्व करता है जिसमें वेब सर्वर को जानकारी प्रस्तुत करने के लिए इंटरैक्टिव नियंत्रण होता है।

HTML वेब पेजों पर हम सभी फॉर्म से परिचित हैं। कई अलग-अलग कारणों से लोग या कंपनियां हमारे ई-मेल पते, नाम और साइट यूआरएल मांग रहे हैं। आज इंटरनेट पर उत्पादों को खरीदना ज्यादातर एक हवा है और सुरक्षा उपकरणों के आगमन के साथ, आपके विवरण और कड़ी मेहनत के पैसे जमा करने के लिए उपयोग की जाने वाली विधि आमतौर पर रूपों के माध्यम से की जाती है।

और जानकारी

लिंक एक

लिंक दो


हां, लेकिन डेटा जमा करने के लिए आपको ईमेल पते या पासवर्ड जैसे पाठ इनपुट के चारों ओर लपेटने की आवश्यकता नहीं है। मैं ajax के साथ आसानी से कर सकता हूँ। प्रपत्र कोई अतिरिक्त सुरक्षा प्रदान नहीं करते हैं। हालाँकि, अगर मैं डेटा एन्क्रिप्ट करता हूं तो मैं php के साथ ऐसा कर सकता हूं।
डी-मार्क

0

मेरे पास एक ऐसा परिदृश्य था जहां एकल वेब पेज के 3 रूप थे, जिनमें से सभी में अलग-अलग ईमेल फ़ील्ड (विभिन्न आईडी के साथ) थे। मैंने उन्हें <div>पहले अलग से लपेटा । जब तक मैं <form>टैग में उन सभी को लपेटता आईओएस पर आईओएस ऑटो फिल अजीब तरह से व्यवहार करता था । प्रपत्रों में से एक में केवल एक इनपुट फ़ील्ड थी, न्यूज़लेटर सदस्यता के लिए। जब उपयोगकर्ता ने उस इनपुट को भर दिया, तो वेब पेज को अगले इनपुट फ़ील्ड पर स्क्रॉल किया गया जो पृष्ठ के विभिन्न भाग पर स्थित था।

तो, धन्यवाद ओका लंबी पोस्ट के लिए। शब्दार्थ अर्थ के साथ टैग का उपयोग जब भी संभव हो, किया जाना चाहिए, क्योंकि आप कभी नहीं जानते कि कौन सा ब्राउज़र / डिवाइस अन्य समाधानों को अच्छी तरह से संभाल नहीं पाता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.