पृष्ठ पुनः लोड करते समय चेकबॉक्स की जाँच क्यों की जाती है?


82

मैं एक वेब पेज पुनः लोड कर रहा हूं जिसमें निम्नलिखित कोड हैं:

<label for="showimage">Show Image</label>
<input id="showimage" name="showimage" type="checkbox" value="1" />

भले ही ब्राउज़र के लिए भेजा गया HTML पृष्ठ के प्रत्येक पुनः लोड के लिए समान है, चेकबॉक्स हमेशा चेक मूल्य पर ले जाता है जब एक पुनः लोड किया गया था। दूसरे शब्दों में, अगर उपयोगकर्ता चेकबॉक्स को चेक करता है और पुनः लोड करता है, तो चेकबॉक्स को अभी भी चेक किया गया है।

क्या यहां कुछ कैशिंग चल रही है?

संपादित करें : मैंने नीचे गॉर्डन बेल के समाधान की कोशिश की और पाया कि यह मूल्य = "1" को हटाने के बाद भी हो रहा है। मुझे और कुछ याद आ रहा है?

<label for="showimage">Show Image</label> 
<input id="showimage" name="showimage" type="checkbox" /> 

जवाबों:


38

हां, मेरा मानना ​​है कि यह कैशिंग है। मैं फ़ायरफ़ॉक्स पर इस व्यवहार को उदाहरण के लिए देखता हूं (सफारी के लिए नहीं, जो इसके लायक है :))।

आप पृष्ठ पुनः लोड कर सकते हैं और कैश बाईपास (Firefox पर) का उपयोग कर CTRL- SHIFT- Rऔर आप देखेंगे जांच मान ले नहीं करता है (एक सामान्य CTRL- Rहालांकि कैश से जानकारी हड़पने जाएगा)

संपादित करें : मैं कैश कंट्रोल हेडर सेट करते हुए फ़ायरफ़ॉक्स पर इस सर्वर साइड को अक्षम करने में सक्षम था:

Cache-Control: no-store

यह फ़ायरफ़ॉक्स के "याद रखें फ़ॉर्म मान" सुविधा को अक्षम करने के लिए लगता है


Yup, CTRL-SHIFT-R चेकबॉक्स को रीसेट करने का कारण बनता है। क्या इसे रोकने के लिए कोई रास्ता नहीं है?
Readonly

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

2
यह कैश से मानों को हड़प रहा है, इस प्रकार यह कैशिंग है। जब तक मैंने गलत नहीं समझा कि आप क्या कहना चाह रहे हैं।
ओवेन

1
फ़ायरफ़ॉक्स की आक्रामक कैशिंग एक प्रमुख पीटीए है और हमेशा इसके खिलाफ विकसित होने पर मुझे पकड़ रही है। मैंने इससे पहले कैश-कंट्रोल हेडर की कोशिश नहीं की है, लेकिन अगर यह स्टैकओवरफ्लो काम करता है तो मैं यहां पूरी तरह से खर्च करने के समय को सही ठहराता हूं।
क्रूचन

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

166

autocomplete="off"पृष्ठ पर प्रपत्र तत्व में जोड़ें । नकारात्मक पक्ष यह है कि यह वैध एक्सएचटीएमएल नहीं है, लेकिन यह किसी भी जटिल जावास्क्रिप्ट के बिना समस्या को ठीक करता है।


1
मेरे लिए काम करता है, जहां कैश-कंट्रोल हेडर नहीं है।
लाजोस मेस्सरोस

7
मैं क्या कर रहा हूँ से पढ़ने , यह है वास्तव में एचटीएमएल 5 में मान्य। (मैंने इस विषय पर और अधिक पढ़ने से पहले पिछली टिप्पणी को रद्द कर दिया था।) यदि आप HTML5 का उपयोग कर रहे हैं तो अपने दिल की सामग्री को चेकबॉक्स पर बंद करें।
EF0

3
10 साल बाद। इस जवाब ने मुझे सिरदर्द से बचा लिया!
डैन वैन डेन बर्ग

33

सेट स्वत: पूर्ण = js के साथ "बंद" भी अच्छी तरह से काम कर रहा है।

उदाहरण के लिए jquery का उपयोग करना:

$(":checkbox").attr("autocomplete", "off");

धन्यवाद, इससे मुझे बहुत मदद मिली। :)
शमोमिर शैडैरिव

1
मैंने पाया कि आप की जरूरत $("#formId").attr("autocomplete", "off")है, जहां #formIdअपने फार्म की आईडी है।
दान डिप्लो

। @DanDiplo वहाँ ( "बंद" "स्वत: पूर्ण",) कई अवसरों जहां हम एक फार्म इसलिए अपने आवेदन करने के लिए ( "#formId") विसंगत attr के बिना एक चेक-बॉक्स का उपयोग कर रहे हैं
Clain डीसिल्वा

2
@ClainDsilva सिर्फ इसलिए कि आप एक फॉर्म के बाहर एक चेकबॉक्स का उपयोग कर सकते हैं इसका मतलब यह नहीं है कि मैंने जो कुछ कहा है वह अतार्किक है। आप यह दावा कर सकते हैं कि यह पूरी तरह से व्यापक नहीं है (हालांकि यह अधिकांश परिदृश्यों के लिए काम करता है) लेकिन यह कहना तर्कसंगत नहीं है कि यह काम करता है यह विचित्र है।
दान डिपलो

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

1

यह फ़ायरफ़ॉक्स की एक अच्छी विशेषता है: यदि आप कुछ टाइप करते हैं, लेकिन पृष्ठ को फिर से लोड करते हैं, तो पाठ पाठ क्षेत्र में रहता है। आपके द्वारा चुनी गई अन्य सेटिंग्स के लिए Idem।

काश, यह एसओ (शायद जेएस द्वारा रीसेट) में काम नहीं करता है और IE जैसे डम्बर ब्राउज़र ...

जो एक समाधान का सुझाव देता है: यदि आपको वास्तव में ऐसा करने की आवश्यकता है, तो जेएस के साथ फॉर्म को रीसेट करें। form.reset () कार्य कर सकता है (रीसेट इनपुट बटन की तरह कार्य करता है)।


1
थोड़ा हैकी लगता है, या तोप से गौरैया को मारना पसंद है।
लाजोस मेस्सरोस

@ MészárosLajos हैकी / ओवरकिल क्या है, और आप इसे ऐसे क्यों देखते हैं? क्या आपको कुछ सरल दिखाई देता है?
फीलो

क्या होगा अगर आप केवल फॉर्म को रीसेट करने के लिए चाहते हैं? मैं, व्यक्तिगत रूप से, केवल चेकबॉक्स के लिए इनपुट कैश को अक्षम करना चाहता हूं, लेकिन टेक्स्टफील्ड के लिए नहीं। मैं आपके साथ पूरी तरह से सहमत हूं, कि यह फ़ायरफ़ॉक्स की एक अच्छी विशेषता है, लेकिन कस्टम दो राज्य बटन के लिए नहीं, जो मूल रूप से पुनः डिज़ाइन किए गए बॉक्स हैं। एक और बात है, जावास्क्रिप्ट का उपयोग क्यों करें, जहां आप इस व्यवहार को रोकने के लिए बस एक html संपत्ति का उपयोग कर सकते हैं? और हाँ, मुझे पता है, "स्वत: पूर्ण = बंद" HTML कोड को अमान्य बनाता है, लेकिन पृष्ठ अभी भी काम करता है।
लाजोस मेस्सरोस

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

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

1

यह एक पुराना सवाल है लेकिन फिर भी फ़ायरफ़ॉक्स के लिए एक सक्रिय मुद्दा है। प्रतिक्रियाओं मैं करने की कोशिश की में से कोई भी इसे हल है, लेकिन क्या किया था मेरे लिए इसे हल बस इस था:

    document.getElementById('formId').reset();

यह पृष्ठ लोड होने पर हर बार डिफ़ॉल्ट विकल्पों में फ़ॉर्म को रीसेट करता है। आदर्श नहीं है क्योंकि आप दानेदार नियंत्रण खो देते हैं, लेकिन इसकी एकमात्र चीज जिसने मेरे लिए इसे हल किया है।


0

या पते की पट्टी पर f5 प्रेस के बजाय :)


1
या ऐसा करने के लिए उपयोगकर्ता को सुझाव दें, बल्कि (यह एक डेवलपर का प्रश्न है)।
श्री टीए

हम वास्तव में उपयोगकर्ताओं को क्रेटल + शिफ्ट + आर के साथ पृष्ठ को हमेशा ताज़ा करने की उम्मीद नहीं कर सकते, क्या हम नहीं?
लाजोस मेस्जारोस

0

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

<META HTTP-EQUIV="Pragma" CONTENT="no-cache"> 
<META HTTP-EQUIV="Expires" CONTENT="-1">

क्या हम वास्तव में IE5 जैसे पुराने ब्राउज़रों की परवाह करते हैं? वैसे, PHP के साथ हेडर भेजना थोड़ा बेहतर लगता है, क्योंकि आप <head> में कम मेटा टैग का इस्तेमाल करते हैं
Lajos Meszaros

2
2014 में उनका जवाब था, @ MészárosLajos टिप्पणी 2014 में थी। उस समय, हां, इससे कोई फर्क नहीं पड़ा।
दूनियादंड


0

जनता के विचार को हल करने के लिए

फ़ॉर्म और रीसेट बटन बनाएं

<form>
<checkbox>
<reset>
</form>

$(reset).trigger("click");//to clear the cache and input 
$(checkbox).trigger("click");//to mark checkbox
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.