HTML फॉर्म में स्वत: पूर्ण अक्षम करने का W3C मान्य तरीका है?


424

xhtml1-transitional.dtdसिद्धांत का उपयोग करते समय , निम्नलिखित HTML के साथ एक क्रेडिट कार्ड नंबर एकत्र करना

<input type="text" id="cardNumber" name="cardNumber" autocomplete='off'/>

W3C सत्यापनकर्ता पर एक चेतावनी को चिह्नित करेगा:

कोई विशेषता "स्वतः पूर्ण" नहीं है।

क्या किसी प्रपत्र में संवेदनशील फ़ील्ड पर ब्राउज़र ऑटो-पूर्ण को अक्षम करने का W3C / मानक तरीका है?


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

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

13
मेरा उपयोग मामला थोड़ा अलग है - मैं अपने स्वयं के स्वत: पूर्ण को रोल कर रहा हूं और मैं नहीं चाहता कि यह ब्राउज़र के साथ टकराव हो। मैंने केवल यह पता लगाया है कि स्वतः पूर्ण = "बंद" अमान्य है, लेकिन ऐसा लगता है कि कोई अन्य सरल समाधान नहीं है (इसे js के साथ इंजेक्ट करना सिर्फ मूर्खतापूर्ण है)
apeer

13
@rmeador क्योंकि कभी-कभी हम मानक ऑटो-सुझाव बॉक्स के लिए अधिक उपयोगकर्ता-अनुकूल विकल्प प्रदान करना चाहते हैं। @corydoras कृपया अपने OSX के वजन को इधर-उधर न करें, यह इस प्रश्न के समाधान में सहायक नहीं है।
जोश एम।

12
समस्या यह है कि यदि कोई कपटपूर्ण लेन-देन हुआ है तो बैंक व्यापारी को उत्तरदायी ठहराएगा ... भले ही ग्राहक की गलती 100% हो। इसलिए, कुछ परिस्थितियों में, ग्राहक के लिए सुविधा को अक्षम करना वैध है।
अलेक्जेंड्रे एच। Tremblay

जवाबों:


421

यहाँ MDC का एक अच्छा लेख है जो समस्याओं (और समाधान) को स्वतः पूर्ण करने के लिए बताता है। Microsoft ने यहाँ भी कुछ ऐसा ही प्रकाशित किया है ।

ईमानदार होने के लिए, यदि यह आपके उपयोगकर्ताओं के लिए कुछ महत्वपूर्ण है, तो इस तरह से 'ब्रेकिंग' मानकों को उचित लगता है। उदाहरण के लिए, अमेज़ॅन 'स्वतः पूर्ण' विशेषता का उपयोग करता है, और यह अच्छी तरह से काम करता है।

यदि आप पूरी तरह से चेतावनी को हटाना चाहते हैं, तो आप इसका उपयोग करने वाले ब्राउज़रों के लिए विशेषता लागू करने के लिए जावास्क्रिप्ट का उपयोग कर सकते हैं (IE और फ़ायरफ़ॉक्स महत्वपूर्ण ब्राउज़र हैं) someForm.setAttribute( "autocomplete", "off" ); someFormElm.setAttribute( "autocomplete", "off" );

अंत में, यदि आपकी साइट HTTPS का उपयोग कर रही है, तो IE स्वचालित रूप से स्वतः पूर्णता बंद कर देता है (जैसा कि आप जानते हैं, कुछ अन्य ब्राउज़र करते हैं)।

अपडेट करें

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


41
ऐसा लगता है कि फ़ायरफ़ॉक्स https पर स्वतः पूर्ण नहीं होता है, लेकिन यह ज्ञान का एक उपयोगी टुकड़ा है। धन्यवाद!
मैट बी

3
सफारी स्वतः पूर्ण = "बंद" विशेषता का सम्मान नहीं करता है। देखें stackoverflow.com/questions/22817801/…
Skurpi

1
autocompleteन केवल formतत्व पर इस्तेमाल किया जा सकता है , और offमूल्य कम से कम में काम करता हैchromium-40.0.2214.115
x-yuri

W3c HTML5.1 में स्वत: पूर्ण होने के मानकों का विस्तार करता हुआ प्रतीत होता है (इस टिप्पणी के रूप में ड्राफ्ट में) w3c.github.io/html/…
जस्टिन

1
यदि कुछ भी काम नहीं करता है, तो स्वतः पूर्ण को बंद करने के लिए टेक्स्टबॉक्स के बजाय टेक्सारिया का उपयोग करें।
बिसेंन

64

मुझे बहुत आश्चर्य होगा अगर W3C ने एक तरीका प्रस्तावित किया होगा जो कि (X) HTML4 के साथ काम करेगा। स्वतः पूर्ण सुविधा पूरी तरह से ब्राउज़र-आधारित है, और पिछले वर्षों (HTML4 मानक लिखे जाने के बाद अच्छी तरह से) के दौरान पेश की गई थी।

अगर HTML5 में एक होगा, तो आश्चर्य नहीं होगा।

संपादित करें: के रूप में मैंने सोचा, एचटीएमएल 5 करता है कि सुविधा। अपने पृष्ठ को HTML5 के रूप में परिभाषित करने के लिए, निम्न सिद्धांत का उपयोग करें (जैसे: इसे अपने स्रोत कोड में पहले पाठ के रूप में डालें)। ध्यान दें कि सभी ब्राउज़र इस मानक का समर्थन नहीं करते हैं, क्योंकि यह अभी भी ड्राफ्ट-रूप में है।

<!DOCTYPE html>

7
सभी ब्राउज़रों को उम्मीद है कि कोनकेर के पुराने संस्करण इसका समर्थन करेंगे। यहां तक ​​कि IE6 भी इसका समर्थन करता है। यह जाने का सिद्धांत है।
बालुसक

56

HTML 4 : नहीं

HTML 5 : हाँ

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

संदर्भ: W3


@ freेस्ट.tk हाँ यह अन्य सभी की तुलना में स्पष्ट है। सादगी मायने रखती है।
ओवरकोडर

32

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

यदि आपको इनपुट फ़ील्ड को " email_<?= randomNumber() ?>" जैसा नाम देना है , और फिर स्क्रिप्ट है जो इस डेटा लूप को POST या GET वैरिएबल के माध्यम से प्राप्त करता है email_[some number], जो पैटर्न से मेल खाते हुए कुछ खोज रहा है ", तो आप इसे हटा सकते हैं, और यह होगा ( व्यावहारिक रूप से) सफलता की गारंटी, ब्राउज़र की परवाह किए बिना


6
यह स्वचालित परीक्षण को कठिन बना देगा।
डेविड वाटर्स

14
स्वत: परीक्षण को और कठिन बना देगा, केवल तभी जब आपके टेस्टिंग सॉफ़्टवेयर कैंट को चेक / रीड फ़ील्ड के लिए जाँचें, जो उनके लिए एक यादृच्छिक संख्या हो सकती है। अपने स्वचालित परीक्षण सॉफ़्टवेयर को अपग्रेड करने का समय हो सकता है।
कोरीडोरस

8
स्वत: पूर्ण जानकारी अभी भी ब्राउज़र की डेटा निर्देशिका में सहेजी जाएगी, यह नहीं होगा?
जोए एडम्स

2
मुमकिन है। लेकिन यह वास्तव में उपयोगकर्ता के लिए फिर से प्रकट होने की उम्मीद नहीं की जाएगी।
फैंटम वाटसन

1
Chrome अब किसी विशेष साइट के नाम विशेषता के बजाय प्रकार = "पासवर्ड" विशेषता का उपयोग करता है। मेरा नाम = "newpassword" स्वतः पूर्ण = 'बंद' प्रकार = "पासवर्ड" है और यह स्वतः पूर्ण हो जाता है! यदि मैं प्रकार बदलता हूं, तो कोई ऑटोफिल नहीं है
Enigma Plus


23

जावास्क्रिप्ट के साथ इसे स्थापित करने के बारे में कैसे?

var e = document.getElementById('cardNumber');
e.autocomplete = 'off'; // Maybe should be false

यह सही नहीं है, लेकिन आपका HTML मान्य होगा।


8
जावास्क्रिप्ट त्रुटियों को सत्यापन त्रुटियों के लिए एक समाधान के रूप में उपयोग करना गलीचा के नीचे धूल झाड़ने जैसा है। हालांकि HTML दस्तावेज़ वैध हो सकता है, परिणामी HTML + JS पृष्ठ नहीं होगा।
1


11

यदि आप jQuery का उपयोग करते हैं, तो आप ऐसा कुछ कर सकते हैं:

$(document).ready(function(){$("input.autocompleteOff").attr("autocomplete","off");});

और जहाँ आप चाहते हैं, स्वतः पूर्ण वर्ग का उपयोग करें:

<input type="text" name="fieldName" id="fieldId" class="firstCSSClass otherCSSClass autocompleteOff" />

यदि आप चाहते हैं कि आपका सभी इनपुट हो autocomplete=off, तो आप बस इसका उपयोग कर सकते हैं:

$(document).ready(function(){$("input").attr("autocomplete","off");});

4
बस HTML5 सिद्धांत का उपयोग करना आसान और बेहतर है।
BalusC

5
यह वास्तव में HTML को वैसे भी मान्य नहीं है, यह html autocompleteमें इसके अलावा किसी अन्य तरीके से अमान्य (अमान्य) विशेषता सेट कर रहा है
मैट b

यह कोड मेरे लिए काम नहीं करता है; मैंने उपयोग किया है $('input.autocompleteOff').val('');जो ठीक लगता है।
ddd

5
जावास्क्रिप्ट त्रुटियों को सत्यापन त्रुटियों के लिए एक समाधान के रूप में उपयोग करना गलीचा के नीचे धूल झाड़ने जैसा है। हालांकि HTML दस्तावेज़ वैध हो सकता है, परिणामी HTML + JS पृष्ठ नहीं होगा।
1

8

एक और तरीका - जो सुरक्षा के साथ भी मदद करेगा, इनपुट बॉक्स को हर बार जब आप इसे प्रदर्शित करते हैं तो कुछ अलग कॉल करें: बस एक कैप्चा की तरह। इस तरह, सत्र केवल एक बार के इनपुट को पढ़ सकता है और ऑटो-कंप्लीट को कुछ नहीं करना है।

बस rmeador के सवाल के बारे में एक बिंदु कि क्या आपको ब्राउज़र अनुभव में हस्तक्षेप करना चाहिए: हम संपर्क प्रबंधन और सीआरएम सिस्टम विकसित करते हैं, और जब आप अन्य लोगों के डेटा को एक ऐसे रूप में टाइप कर रहे हैं जो आप नहीं चाहते हैं कि यह लगातार आपके खुद के विवरण का सुझाव दे।

यह हमारी जरूरतों के लिए काम करता है, लेकिन फिर हमारे पास उपयोगकर्ताओं को एक सभ्य ब्राउज़र प्राप्त करने के लिए कहने की लक्जरी है :)

autocomplete='off' 

8

autocomplete="off" यह सभी आधुनिक ब्राउज़रों के लिए समस्या को ठीक करना चाहिए।

<form name="form1" id="form1" method="post" autocomplete="off"
   action="http://www.example.com/form.cgi">
  [...]
</form>

गेको ब्राउज़रों के वर्तमान संस्करणों में, स्वतः पूर्ण विशेषता पूरी तरह से काम करती है। पहले संस्करण के लिए, नेटस्केप 6.2 पर वापस जा रहे हैं, इसने "पता" और "नाम" के साथ रूपों के अपवाद के साथ काम किया

अपडेट करें

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

autocomplete="nope"

चूंकि यह यादृच्छिक मान नहीं है valid one , इसलिए ब्राउज़र इसे छोड़ देगा।

Documetation


आधुनिक ब्राउज़र पसंद से स्वतः पूर्ण = का सम्मान नहीं करते हैं। : / दुर्भाग्य से।
एलेक्सस

@Alexus ने कुछ अपडेट जोड़ा ... इंटरनेट परिवर्तन बहुत तेजी से
एमिलियो गॉर्ट

6

एक यादृच्छिक 'नाम' विशेषता का उपयोग करना मेरे लिए काम करता है।

मैं फॉर्म भेजते समय नाम की विशेषता को रीसेट करता हूं ताकि आप फॉर्म भेजते समय भी इसे नाम से एक्सेस कर सकें। (नाम को संग्रहीत करने के लिए आईडी विशेषता का उपयोग करके)


5

ध्यान दें कि स्वतः पूर्ण विशेषता के स्थान के बारे में कुछ भ्रम है। इसे या तो पूरे FORM टैग या अलग-अलग INPUT टैग पर लागू किया जा सकता है, और यह वास्तव में HTML5 से पहले मानकीकृत नहीं किया गया था (जो स्पष्ट रूप से दोनों स्थानों की अनुमति देता है )। पुराने रूप से इस विशेष रूप से मोज़िला लेख में केवल FORM टैग का उल्लेख है। एक ही समय में कुछ सुरक्षा स्कैनर केवल इनपुट टैग में स्वत: पूर्ण के लिए देखो और अगर यह कमी है शिकायत (भले ही होगा है माता पिता के रूप में)। इस मेस का और अधिक विस्तृत विश्लेषण यहां पोस्ट किया गया है: HTML रूपों में AUTOCOMPLETE = OFF विशेषताओं पर भ्रम


3

आदर्श नहीं है, लेकिन आप टेक्स्ट बॉक्स की आईडी और नाम को हर बार जब आप इसे प्रस्तुत करते हैं, तो इसे बदल सकते हैं - आपको इसे सर्वर साइड भी ट्रैक करना होगा ताकि आप डेटा बाहर निकाल सकें।

यकीन नहीं है कि यह काम करेगा या नहीं, सिर्फ एक विचार था।


2

मुझे लगता है कि एक सरल तरीका है। एक यादृच्छिक नाम (जावास्क्रिप्ट के माध्यम से) के साथ एक छिपा हुआ इनपुट बनाएं और उपयोगकर्ता नाम को उस पर सेट करें। पासवर्ड के साथ दोहराएँ। इस तरह आपकी बैकेंड स्क्रिप्ट को पता है कि अंधेरे में स्वत: पूर्ण रहते हुए उपयुक्त फ़ील्ड नाम क्या है।

मैं शायद गलत हूं, लेकिन यह सिर्फ एक विचार है।


2
if (document.getElementsByTagName) {
    var inputElements = document.getElementsByTagName("input");
    for (i=0; inputElements[i]; i++) {
        if (inputElements[i].className && (inputElements[i].className.indexOf("disableAutoComplete") != -1)) {
            inputElements[i].setAttribute("autocomplete","off");
        }
    }
}

-1

यह समाधान मेरे साथ काम करता है:

$('form,input,select,textarea').attr("autocomplete", "nope");

यदि आप इस क्षेत्र में ऑटोफिल का उपयोग करना चाहते हैं: autocomplete="false"तत्व पूर्व में जोड़ें :

<input id="search" name="search" type="text" placeholder="Name or Code" autcomplete="false">

-5

मान्य स्वतः पूर्ण

<script type="text/javascript">
    /* <![CDATA[ */
    document.write('<input type="text" id="cardNumber" name="cardNumber" autocom'+'plete="off"/>');
    /* ]]> */ 
</script>

13
निश्चित रूप से अगर एक उपयोगकर्ता ने JS को बंद कर दिया था, तो वे एक आदेश पूरा नहीं कर सकते क्योंकि वे अपना कार्ड नंबर दर्ज नहीं कर सकते हैं? जेएस के माध्यम से विशेषता को पूरक करने के लिए बेहतर है - मैं कहूंगा - सबसे खराब स्थिति, जेएस बंद ऑटो-पूर्ण के लिए संभावित के साथ कार्ड नंबर फ़ील्ड देता है, लेकिन कम से कम वे एक आदेश दे सकते हैं ... बस एक विचार :)
Terry_Brown

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