आवश्यक विशेषता HTML5


81

अपने वेब एप्लिकेशन के भीतर मैं अपने फ़ॉर्म फ़ील्ड के लिए कुछ कस्टम सत्यापन का उपयोग कर रहा हूं। उसी रूप में मेरे पास दो बटन हैं: एक को वास्तव में फ़ॉर्म को रद्द करने और दूसरे को फ़ॉर्म को रद्द / रीसेट करने के लिए।

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

मैंने अपने जावास्क्रिप्ट कोड में थोड़ा बदलाव किया और मुझे पता चला कि निम्नलिखित लाइन समस्या पैदा कर रही थी:

document.getElementById("somefield").required = true;

यह सुनिश्चित करने के लिए कि वास्तव में मैं एक परीक्षण परिदृश्य बनाया समस्या होगी:

<!DOCTYPE html>
<html>
<head>
    <title>Test</title>
</head>

<body>
    <form id="someform">
        <label>Name:</label>&nbsp;<input type="text" id="name" required="true" /><br/>
        <label>Car:</label>&nbsp;<input type="text" id="car" required="true" /><br/>
        <br/>
        <input type="submit" id="btnsubmit" value="Submit!" />
    </form>
</body>
</html>

मुझे जो उम्मीद थी वो होगा। पहले फ़ील्ड "नाम" को स्वचालित रूप से फ़ोकस मिला।

किसी और को इस में ठोकर खाई?


2
अब आवश्यक विशेषता को सही पर सेट करने की आवश्यकता नहीं है। उदाहरण के लिए: <input type = "text" id = "name" आवश्यकता = "true" /> और <input type = "text" id = "name" अपेक्षित /> समान है
RSK

सच है, यह मेरी एक बुरी आदत है, जब मुझे एक्सएचटीएमएल में कोड करने के लिए इस्तेमाल किया गया था ... लेकिन क्या सभी आधुनिक ब्राउज़र इस टैग का समर्थन बिना = "आवश्यक" करते हैं? मेरा मानना ​​है कि सफ़ारी नहीं ...
लोईक कारा सिप

वास्तविक और अपेक्षित व्यवहार क्या है?
सिरो सेंटिल्ली 郝海东 i iro i

ब्लॉग के अनुसार .grayghostvisuals.com/html/using-html-required-attribute "यदि विशेषता मौजूद है, तो इसका मान या तो खाली स्ट्रिंग होना चाहिए या ऐसा मान होना चाहिए जो विशेषता के विहित नाम के लिए केस-असंवेदनशील मेल है, जिसमें कोई नहीं है व्हाट्सएप का नेतृत्व या अनुगामी। "बूलियन" विशेषताओं के लिए, इसलिए आवश्यक के बजाय = "सत्य" के लिए आवश्यक होना चाहिए = "आवश्यक" या बस आवश्यक
जॉर्ज बिर्बिलिस

जवाबों:


49

मैं सिर्फ सफारी 5 के साथ इस मुद्दे में भाग गया और यह कुछ समय के लिए ओपेरा 10 के साथ एक मुद्दा रहा है, लेकिन मैंने इसे ठीक करने के लिए कभी समय नहीं बिताया। अब मुझे इसे ठीक करने की आवश्यकता है और आपके पोस्ट को देखा लेकिन फॉर्म को रद्द करने के तरीके पर अभी तक कोई समाधान नहीं हुआ है। बहुत खोज के बाद आखिरकार मुझे कुछ मिला:

http://www.w3.org/TR/html5/forms.html#attr-fs-formnovalidate

<input type=submit formnovalidate name=cancel value="Cancel">

सफारी 5 और ओपेरा 10 पर काम करता है।


8
आप novalidateपूरे फॉर्म के लिए ऐसा करने के लिए फॉर्म टैग पर भी उपयोग कर सकते हैं ।
माइकल जूनियर

मैंने वर्तमान टैब में सभी रूपों में इस विशेषता को जोड़ते हुए एक छोटा क्रोम एक्सटेंशन पैक किया है, टिप के लिए धन्यवाद! chrome.google.com/webstore/detail/html5-form-validation-rem/…
डेमियन

मेरे मामले के लिए महत्वपूर्ण था, formnovalidateबटन प्रकार सबमिट के साथ भी काम करता है <button type="submit" formnovalidate>Submit</button>:।
मयिनुल इस्लाम

256

ध्यान दें कि

<input type="text" id="car" required="true" />

गलत है, यह एक होना चाहिए

<input type="text" id="car" required />
<input type="text" id="car" required="" />
<input type="text" id="car" required='' />
<input type="text" id="car" required=required />
<input type="text" id="car" required="required" />
<input type="text" id="car" required='required' />

ऐसा इसलिए है क्योंकि trueमान बताता है कि falseमूल्य प्रपत्र नियंत्रण को वैकल्पिक बना देगा, जो कि ऐसा नहीं है।


7
यह उत्तर सही है, लेकिन मुझे लगता है कि यह समस्या नहीं है जो हमारे यहाँ है।
फोनिक्स

यह उपयोग करने के लिए सुरक्षित है? ... मेरा मतलब है कि मुझे इसका उपयोग करना चाहिए या सिर्फ जावास्क्रिप्ट सत्यापन के लिए रहना चाहिए? सुरक्षित रूप से मेरा मतलब है, क्या यह समाधान अलग ब्राउज़र / डिवाइस पर विसंगतियों का उत्पादन करता है ...
kebyang

8
मैं यह बताना चाहता हूं कि मूल कोड "गलत" नहीं है, इसका मतलब यह है कि आप falseएक क्षेत्र को वैकल्पिक बनाने के लिए उपयोग कर सकते हैं (आवश्यक नहीं) - जो कि मामला नहीं है। आपको यह समझना चाहिए कि requiredविशेषता की उपस्थिति फ़ील्ड को आवश्यक बनाती है। फ़ील्ड को वैकल्पिक बनाने का एकमात्र तरीका विशेषता को निकालना है। और गंभीर पक्ष की वैधता सभी अतिरिक्त सामग्री (चिल्ला के लिए खेद है) है।
रायन व्हेल

@RyanWheale मुझे लगता है कि ग्राहक पक्ष सत्यापन (स्वयं द्वारा अपर्याप्त) वास्तव में बहुत मायने रखता है
jinglesthula

1
@jinglesthula - क्लाइंट-साइड सत्यापन कुछ भी नहीं है, लेकिन उपयोगकर्ता के लिए एक सुविधा है (सर्वर पर गोल यात्राओं को सहेजना, जिसके परिणामस्वरूप बेहतर UX है)। मैं एक पिछली टिप्पणी को संबोधित कर रहा था "यह [ब्राउज़रों के पार] का उपयोग करने के लिए सुरक्षित है" - और इसका उत्तर यह है कि यह वास्तव में तब तक मायने नहीं रखता है जब तक कि आपके सर्वर-साइड सत्यापन काम कर रहा हो (उदाहरण के लिए पुराने ब्राउज़र एचटीएमएल 5 फॉर्म को पहचान नहीं पाएंगे। सत्यापन (शून्य मान के साथ "आवश्यक" फ़ील्ड सबमिट करेगा)।
रयान व्हीले

19

यदि मैं आपके प्रश्न को सही ढंग से समझता हूं, तो क्या यह तथ्य है कि requiredविशेषता सफारी में डिफ़ॉल्ट व्यवहार करती है जो आपको भ्रमित कर रही है? यदि ऐसा है तो देखें: http://w3c.github.io/html/sec-forms.html#the-required-attribute

required HTML 5 में एक कस्टम विशेषता नहीं है। यह कल्पना में परिभाषित किया गया है, और ठीक उसी तरह से उपयोग किया जाता है जिस तरह से आप वर्तमान में इसका उपयोग कर रहे हैं।

संपादित करें : ठीक है, ठीक नहीं है । जैसा कि ms2ger ने बताया है, requiredविशेषता एक बूलियन विशेषता है , और यहां HTML 5 युक्ति के बारे में उन लोगों को कहना है:

नोट: मूल्य "सच" और "झूठे" बूलियन विशेषताओं पर अनुमति नहीं है। झूठे मूल्य का प्रतिनिधित्व करने के लिए, विशेषता को पूरी तरह से छोड़ना होगा।

देखें: http://w3c.github.io/html/infrastructure.html#sec-boolean-attributes


2
और यही कारण है कि हमें मानक वस्तुओं पर कस्टम विशेषताएँ या गुण नहीं बनाने चाहिए।
क्वेंटिन

किसी भी विचार कैसे विशेष पृष्ठ के लिए क्रोम और सफारी के लिए इसे बंद करने के लिए?
रेस्टुटा

@Restuta के बारे में जाना: क्रोम में इसे अक्षम करने के लिए झंडे। फ़ायरफ़ॉक्स, मुझे यकीन नहीं है।
therealklanni

8

सफारी 7.0.5 अभी भी इनपुट क्षेत्रों के सत्यापन के लिए अधिसूचना का समर्थन नहीं करता है।

इसे दूर करने के लिए इस तरह से फॉलबैक स्क्रिप्ट लिखना संभव है: http://codepen.io/ashblue/pen/KyvmA

यह देखने के लिए कि HTML5 / CSS3 की विशेषताएँ ब्राउज़रों द्वारा समर्थित हैं: http://caniuse.com/form-validation

function hasHtml5Validation () {
  //Check if validation supported && not safari
  return (typeof document.createElement('input').checkValidity === 'function') && 
    !(navigator.userAgent.search("Safari") >= 0 && navigator.userAgent.search("Chrome") < 0);
}

$('form').submit(function(){
    if(!hasHtml5Validation())
    {
        var isValid = true;
        var $inputs = $(this).find('[required]');
        $inputs.each(function(){
            var $input = $(this);
            $input.removeClass('invalid');
            if(!$.trim($input.val()).length)
            {
                isValid = false;
                $input.addClass('invalid');                 
            }
        });
        if(!isValid)
        {
            return false;
        }
    }
});

SASS / LESS:

input, select, textarea {
    @include appearance(none);
    border-radius: 0px;

    &.invalid {
        border-color: red !important;
    }
}

धन्यवाद। इसने मेरी बहुत मदद की।
theGreenCabbage

वह सादा सीएसएस या कम है?
जेम्स ए मोहलर

मेरे पास एक आइपॉड टच है जो मेरे जीवन के लिए है, फिर भी आग लग जाती है जब आवश्यक के रूप में चिह्नित इनपुट काम नहीं करते हैं और इस प्रश्नोत्तर को मिला है। यह जवाब केवल वही था जो मेरे लिए काम करता था। बस सोचा था कि मैं इसे साझा करूंगा।
फंक फोर्टी निनेर

7

कस्टम विशेषताओं पर एक छोटा नोट: HTML5 सभी प्रकार की कस्टम विशेषताओं की अनुमति देता है, जब तक कि वे कण के साथ उपसर्ग कर रहे हैं data-, अर्थात data-my-attribute="true"


1
और ये पुराने ब्राउज़रों में ठीक काम करते हैं (सिवाय आपको नए एपीआई के बजाय अपने मूल्यों तक पहुंचने के लिए आपके अपने कोड की आवश्यकता होगी), इसलिए वे अपनी विशेषताओं को बनाने से बेहतर विकल्प हैं (जैसा कि वे किसी के साथ संघर्ष नहीं करेंगे। आधिकारिक विशेषताओं को भविष्य में जोड़ा गया)।
पॉल डी। वेट

1
वास्तव में, कस्टम विशेषताएँ सचमुच कुछ भी हो सकती हैं। "डेटा-" के साथ उपसर्ग करने वाले element.datasetऑब्जेक्ट में दिखाई देंगे , हालांकि, साथ ही साथ अन्य फायदे (उदाहरण के लिए, jQuery स्वचालित रूप से किसी भी "डेटा-" उपसर्ग कस्टम विशेषता का उपयोग करने में सक्षम हो जाएगा .data()विधि का उपयोग , .data("myAttribute")= = का मान data-my-attribute)। कम कस्टम विशेषताओं का उपयोग करना कभी-कभी कस्टम CSS3 चयनकर्ताओं को बनाने के लिए उपयोगी हो सकता है।
थेरैक्लेंनी

3

ठीक है। उसी समय जब मैं अपना प्रश्न लिख रहा था कि मेरे एक सहकर्मी ने मुझे अवगत कराया कि यह वास्तव में एचटीएमएल 5 व्यवहार है। Http://dev.w3.org/html5/spec/Overview.html#the-required-attribute देखें

HTML5 में लगता है कि एक नई विशेषता है "आवश्यक"। और सफारी 5 में पहले से ही इस विशेषता के लिए एक कार्यान्वयन है।


धिक्कार है, आपने उसी उत्तर को पोस्ट करने के कुछ सेकंड के भीतर ही आपके अपने प्रश्न का उत्तर दे दिया!
डेविड फोस्टर

वास्तव में मेरे एक सहकर्मी का धन्यवाद। यह दूसरों के लिए दिलचस्प हो सकता है मुझे लगता है?
जोप

निश्चित रूप से! मैं यह देखने के लिए उत्साहित हूं कि फॉर्म के मोर्चे पर अंतिम एचटीएमएल 5 कल्पना की पेशकश क्या होगी।
डेविड फोस्टर

2

बस अपने फॉर्म के नीचे निम्नलिखित डालिए। सुनिश्चित करें कि आपके इनपुट फ़ील्ड हैं required

<script>
    var forms = document.getElementsByTagName('form');
    for (var i = 0; i < forms.length; i++) {
        forms[i].noValidate = true;
        forms[i].addEventListener('submit', function(event) {
            if (!event.target.checkValidity()) {
                event.preventDefault();
                alert("Please complete all fields and accept the terms.");
            }
        }, false);
    }
</script>
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.