दिलचस्प पोस्ट
क्या कोई C ++ क्लास सदस्य फ़ंक्शन टेम्पलेट आभासी हो सकता है? क्या सीएमएडी में अनिर्दिष्ट किसी यूनियन के माध्यम से प्रकार-छेड़छाड़ की जाती है, और क्या यह सी 11 में निर्दिष्ट हो गया है? पायथन उपयोगकर्ता से एक अक्षर पढ़ता है किसी स्ट्रिंग को एक सूची में विभाजित कैसे करें? जावास्क्रिप्ट में महीने के आखिरी दिन की गणना करें JQuery या Google सीडीएन के लिए माइक्रोसॉफ्ट सीडीएन? मैं किसी अन्य बैट फ़ाइल से पृष्ठभूमि में बैट फ़ाइल कैसे चला सकता हूं? एचएच: एमएम समय प्रारूप के मिलान के लिए नियमित अभिव्यक्ति 4xcode में पायथन? धागा संदर्भ स्विच बनाम प्रक्रिया संदर्भ स्विच आयफोन 5 और आईफोन 4 उपकरणों दोनों के साथ xib संगत कैसे करें प्रत्येक सदस्य के आकार के आकार के बराबर एक संरचना के लिए आकार क्यों नहीं है? एंड्रॉइड इन्टेंट को अनुकूलित करें। ACTION_SEND सूची <ऑब्जेक्ट> सूची <MyClass> को कैसे डालना Servlet को फ़ॉर्म सबमिट करने के बाद मैं जेएसएपी में HTML प्रपत्र फ़ील्ड वैल्यू कैसे बना सकता हूं?

पृष्ठ लोड के बीच चर को जारी रखें

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

यहां मैंने जो कोशिश की वह है:

var clicked = false; $(document).ready(function() { $("input[type='submit'][value='Search']").attr("onclick", "form.act.value='detailSearch'; clicked = true; return true;"); if (clicked == true) { // show hidden fields } else { // don't show hidden fields } }); 

इस कोड में क्या गलत है पर कोई सुझाव?

वेब के समाधान से एकत्रित समाधान "पृष्ठ लोड के बीच चर को जारी रखें"

चूंकि HTTP स्थितिविहीन है, हर बार जब आप पृष्ठ को लोड करते हैं, तो यह आपके द्वारा JavaScript में सेट किए गए सभी के प्रारंभिक मानों का उपयोग करेगा। आप जेएस में ग्लोबल वैरिएबल सेट नहीं कर सकते हैं और फिर पृष्ठ को फिर से लोड करने के बाद उस वेल एक्सवेल कर सकते हैं।

कुछ तरीके हैं जो आप दूसरे स्थान पर मान को स्टोर कर सकते हैं ताकि आप जावास्क्रिप्ट का उपयोग करके लोड पर इसे आरंभ कर सकें


क्वेरी स्ट्रिंग

GET विधि का उपयोग करते हुए फ़ॉर्म सबमिट करते समय, url को क्वेरी स्ट्रिंग के साथ अपडेट किया जाता है ( ?parameter=value&something=42 )। आप किसी इनपुट फ़ील्ड को एक निश्चित मान के रूप में सेट करके इसका उपयोग कर सकते हैं। यह सबसे आसान उदाहरण होगा:

 <form method="GET"> <input type="hidden" name="clicked" value="true" /> <input type="submit" /> </form> 

पृष्ठ के प्रारंभिक लोड पर, कोई क्वेरी स्ट्रिंग सेट नहीं है। जब आप इस फ़ॉर्म को जमा करते हैं, तो इनपुट के name और value संयोजन को क्वेरी स्ट्रिंग में clicked=true जाता है जैसे कि clicked=true । इसलिए जब पृष्ठ उस क्वेरी स्ट्रिंग के साथ फिर से लोड होता है, तो आप यह जांच सकते हैं कि बटन क्लिक किया गया था या नहीं।

इस डेटा को पढ़ने के लिए, आप पृष्ठ लोड पर निम्न स्क्रिप्ट का उपयोग कर सकते हैं:

 function getParameterByName(name) { name = name.replace(/[\[]/, "\\[").replace(/[\]]/, "\\]"); var regex = new RegExp("[\\?&]" + name + "=([^&#]*)"), results = regex.exec(location.search); return results === null ? "" : decodeURIComponent(results[1].replace(/\+/g, " ")); } var clicked = getParameterByName('clicked'); 

( स्रोत )

इसका उपयोग करने की योग्यता इस बात पर निर्भर करती है कि आपका फॉर्म वर्तमान में कैसे काम करता है, यदि आप पहले से ही किसी POST का उपयोग करते हैं तो यह समस्याग्रस्त हो सकता है

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


वेब भंडारण

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

यहां मैंने बटन क्लिक ईवेंट पर संग्रहण सेट किया है, लेकिन आप इसे सबमिट करने या कुछ और करने के लिए बाध्य भी कर सकते हैं।

 $('input[type="submit"][value="Search"]').click(function() { sessionStorage.setItem('clicked', 'true'); }); 

तब जब आप पृष्ठ को लोड करते हैं, तो आप यह जांच सकते हैं कि इसका उपयोग करके सेट किया गया है या नहीं:

 var clicked = sessionStorage.getItem('clicked'); 

हालांकि यह मान केवल इस ब्राउज़िंग सत्र के दौरान सहेजा जाता है, हो सकता है कि आप इसे पहले रीसेट करना चाहते हैं। ऐसा करने के लिए, इसका उपयोग करें:

 sessionStorage.removeItem('clicked'); 

यदि आप एक जेएस ऑब्जेक्ट या सरणी को सहेजना चाहते हैं तो आपको उस स्ट्रिंग में कन्वर्ट करना चाहिए। युक्ति के मुताबिक यह अन्य डेटाटाइप्स को सहेजना संभव है, लेकिन यह अभी तक सभी ब्राउज़रों में सही ढंग से लागू नहीं किया गया है।

 //set localStorage.setItem('myObject', JSON.stringify(myObject)); //get var myObject = JSON.parse(localStorage.getItem('myObject')); 

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


कुकीज़

वेब भंडारण के लिए एक विकल्प एक कुकी में डेटा सहेज रहा है कुकीज़ को मुख्य रूप से डेटा सर्वर-पक्ष को पढ़ने के लिए बनाया जाता है, लेकिन इसका उपयोग केवल ग्राहक-पक्ष डेटा के लिए भी किया जा सकता है।

आप पहले से ही jQuery का उपयोग कर रहे हैं, जो कुकीज़ को बहुत आसान बना देता है। दोबारा, मैं यहाँ पर click ईवेंट का उपयोग करता हूं, लेकिन कहीं भी इस्तेमाल किया जा सकता है

 $('input[type="submit"][value="Search"]').click(function() { $.cookie('clicked', 'true', {expires: 1}); // expires in 1 day }); 

फिर पेज लोड पर आप इस तरह कुकी पढ़ सकते हैं:

 var clicked = $.cookie('clicked'); 

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

 if(clicked === "true") { //doYourStuff(); $.cookie('clicked', null); } 

(सेट / पढ़ने के लिए कुकीज़ का एक गैर-jQuery तरीका सही यहां पाया जा सकता है )

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


window.name

यद्यपि यह मुझे एक हैक जैसा लगता है जो संभवतः window.name से पहले उत्पन्न हुआ था, आप window.name संपत्ति में जानकारी संग्रहीत कर सकते हैं:

 window.name = "my value" 

यह केवल स्ट्रिंग्स को स्टोर कर सकता है, इसलिए यदि आप किसी ऑब्जेक्ट को सहेजना चाहते हैं तो आपको इसे ऊपर की localStorage उदाहरण की तरह ही तार करना होगा:

 window.name = JSON.stringify({ clicked: true }); 

मुख्य अंतर यह है कि यह जानकारी न केवल पृष्ठ रीफ़्रेश पर बल्कि विभिन्न डोमेन के लिए भी बरकरार रखी जाती है। हालांकि, यह आपके द्वारा चालू टैब में प्रतिबंधित है

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

$.holdReady() का उपयोग करने का प्रयास करें। $.holdReady() , history

 <script src="jquery.js" type="text/javascript"></script> </head> <body> <form method="POST"> <input type="text" name="name" value="" /> <input type="submit" value="Search" /> <input type="hidden" /> <input type="hidden" /> </form> <script type="text/javascript"> function show() { return $("form input[type=hidden]") .replaceWith(function(i, el) { return "<input type=text>" }); } $.holdReady(true); if (history.state !== null && history.state.clicked === true) { // show hidden fields // if `history.state.clicked === true` , // replace `input type=hidden` with `input type=text` show(); console.log(history); } else { // don't show hidden fields console.log(history); } $.holdReady(false); $(document).ready(function() { $("input[type=submit][value=Search]") .on("click", function(e) { e.preventDefault(); if (history.state === null) { // do stuff history.pushState({"clicked":true}); // replace `input type=hidden` with `input type=text` show(); console.log(history); } else { // do other stuff }; }); }); </script> </body> 

localeStorage या sessionStorage का उपयोग करना सबसे अच्छा शर्त लगता है

ग्लोबले स्कोप स्टोर में clicked चर को सहेजने का इंटैग करें इस तरह से:

 if(localeStorage.getItem("clicked") === null) localeStorage.setItem("clicked", "FALSE"); // for the first time $(document).ready(function() { $("input[type='submit'][value='Search']").attr("onclick", "form.act.value='detailSearch';return true;"); var clicked = localeStorage.getItem("clicked") == "FALSE" ? "TRUE" : "FALSE"; localeStorage.setItem("clicked", clicked); if (clicked == "TRUE") { // show hidden fields } else { // don't show hidden fields } }); 

आप यह कोशिश कर सकते हैं:

  $("input[type='submit'][value='Search']").click(function(){ form.act.value='detailSearch'; clicked = true; return true; });