2008-11-18 10 views
58

मैं एक वेब पेज के लिए निम्न कोड है कि पुन: लोड कर रहा हूँ:पृष्ठ को फिर से लोड करते समय चेकबॉक्स क्यों चेक किया जाता है?

<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" /> 

उत्तर

28

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

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

संपादित से जानकारी हड़पने जाएगा: मैं Firefox पर इस सर्वर साइड निष्क्रिय करने में सक्षम था, एक कैश नियंत्रण हेडर की स्थापना:

Cache-Control: no-store 

इस फ़ायरफ़ॉक्स

+0

हाँ, Ctrl-Shift-आर चेक बॉक्स रीसेट हो जाती है। क्या इसे कैश होने से रोकने का कोई तरीका है? – Readonly

+0

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

+0

से इस तरह की परिस्थितियों में विश्वसनीय रूप से कैशिंग को रोकने के लिए इसे प्राप्त करने में सक्षम हूं, जैसे कि हार्ड-रीलोड भी फॉर्म सामग्री को याद रखने की जानबूझकर विशेषता को बंद कर देता है। वही व्यवहार टेक्स्ट फ़ील्ड, मेनू इत्यादि को भी प्रभावित करता है – bobince

2

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

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

कौन सा एक समाधान का सुझाव: यदि आप वास्तव में है कि, जे एस के साथ प्रपत्र रीसेट करने की ज़रूरत है। form.reset() नौकरी कर सकता है (रीसेट इनपुट बटन की तरह कार्य करता है)। स्थिर वेब साइटों है कि नहीं गतिशील वेब अनुप्रयोगों के लिए बहुत बुरा, भी अक्सर बदल रहे हैं के लिए बहुत उपयोगी -

+1

थोड़ा हैकी लगता है, या एक तोप के साथ एक स्पैरो शूटिंग की तरह लगता है। –

+0

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

+0

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

0

या F5 प्रेस के बजाय एक ब्राउज़र कैशिंग के कारण पता पट्टी :)

+0

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

+0

हम वास्तव में उपयोगकर्ताओं को Crtl + Shift + R के साथ पृष्ठ को रीफ्रेश करने की उम्मीद नहीं कर सकते हैं, है ना? –

0

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

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

क्या हम वास्तव में ऐसे पुराने ब्राउज़र की देखभाल करते हैं, जैसे आईई 5? वैसे, PHP के साथ हेडर भेजना थोड़ा बेहतर लगता है, क्योंकि आप –

+2

में कम मेटा टैग का उपयोग करते हैं, उनका जवाब 2008 में था, @ मेज़ारोस लॉजोस टिप्पणी 2014 में थी। उस समय, हाँ, इससे कोई फर्क नहीं पड़ता। – Duniyadnd

109

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

+0

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

+5

मैं जो पढ़ रहा हूं [http://www.w3schools.com/html/html_form_attributes.asp), यह _is_ वास्तव में HTML5 में मान्य है। (मैंने इस विषय पर और अधिक पढ़ने से पहले पिछली टिप्पणी को ऊपर उठाया था।) यदि आप HTML5 का उपयोग कर रहे हैं तो चेकबॉक्स पर अपने दिल की सामग्री पर स्वत: पूर्ण उपयोग करें। – EF0

29

सेट स्वत: पूर्ण = जेएस के साथ "ऑफ" भी अच्छी तरह से काम कर रहा है।

उदाहरण के लिए

का उपयोग कर jQuery:।

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

धन्यवाद, इससे मुझे बहुत मदद मिली।:) –

+1

मैंने पाया कि आपको '$ (" # formId ") की आवश्यकता है। Attr (" स्वतः पूर्ण "," बंद ") 'जहां' # formId' आपके रूप की आईडी है। –

+0

@DanDiplo ऐसे कई अवसर हैं जहां हम एक फॉर्म के बिना चेक-बॉक्स का उपयोग करते हैं, इसलिए लागू करने के लिए यह अनौपचारिक है ("#formId")। Attr ("स्वतः पूर्ण", "ऑफ") –

0

$ ("# showimage") सहारा ("जाँच", झूठी);

0

सार्वजनिक विचार हल करने के लिए है कि

मेकअप प्रपत्र & रीसेट बटन

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

$(reset).trigger("click");//to clear the cache and input 
$(checkbox).trigger("click");//to mark checkbox 
संबंधित मुद्दे