दर्ज करते समय फ़ॉर्म सबमिशन के बाद आग लग जाता है मैंने Google.maps.places.Autocomplete को Google मानचित्र जावास्क्रिप्ट API V3 से मूल खोज फ़ॉर्म में जोड़ा है। मैं यह पता लगाने के लिए एक विश्वसनीय तरीका खोजने का प्रयास कर रहा हूं कि उपयोगकर्ता ने स्वत: पूर्ण सूची (या तो माउस या कीबोर्ड के साथ) से कोई आइटम चुना है या मुक्त फॉर्म टेक्स्ट सबमिट कर रहा है।Google Places स्वत: पूर्ण स्थान_changed ईवेंट
कोड: http://jsfiddle.net/2rhL3cyk/1/
मैं निम्न बुनियादी परिदृश्यों, जिनमें से प्रत्येक एक रूप प्रस्तुत करने में परिणाम चाहिए के खिलाफ परीक्षण कर रहा हूँ। locMatch
सत्य होना चाहिए यदि उपयोगकर्ता ने स्वत: पूर्ण आइटम चुना है।
- place_changed निकाल दिया
- ऑनसबमिट निकाल दिया:
- freeform पाठ दर्ज करें, एंटर दबाएं। locMatch: झूठी
- ऑनसबमिट निकाल दिया। locMatch: झूठी
- निकाल दिया place_changed (बहुत देर हो चुकी!)
- निकाल दिया place_changed
- ऑनसबमिट निकाल (जगह पर क्लिक करने के बाद)। locMatch:
- निकाल दिया place_changed (जगह पर क्लिक करने के बाद)
- निकाल दिया place_changed: सच
- एक जगह का चयन करने के लिए पाठ, माउस का उपयोग करें दर्ज करें, freeform स्ट्रिंग के लिए परिवर्तन पाठ (बटन पर क्लिक करने के बाद), दर्ज मारा (नया टेक्स्ट दर्ज करने और एंटर मारने के बाद)
- सबमिट पर सबमिट करें। locMatch: झूठी
- निकाल दिया place_changed
- ऑनसबमिट निकाल (जगह पर क्लिक करने के बाद)। locMatch: सच
- दर्ज निकाल दिया place_changed (जगह पर क्लिक करने के बाद)
- सबमिट पर सबमिट करें। locMatch: सच (बटन नया पाठ में प्रवेश करने और क्लिक करने के बाद)
- place_changed
केवल मामलों 1, 3, और 4 काम अपेक्षा के अनुरूप निकाल दिया।
# 2 में, सबमिट करने से पहले सबमिमिट निकाल दिया जा रहा है, इसलिए फॉर्म के सबमिट होने तक इसे लोकमैच सेट करने का मौका नहीं है।यह मैन्युअल place_changed ट्रिगर करने के लिए है, क्योंकि भले ही इनपुट क्षेत्र सही पाठ है, autocomplete.getPlace() जब तक के बाद प्रपत्र आग प्रस्तुत अपरिभाषित रहता मदद नहीं करता है। मैं यह इसलिए की तरह एक भयानक setTimeout हैक के साथ काम करने के लिए मजबूर कर रहा था:
$('#loc_search').submit(function (e) {
setTimeout(function() {
console.log('submit for real! locMatch:', locMatch);
$(this).submit();
}, 150);
});
मैं वास्तव में इसे ठीक करने के लिए एक अधिक समझदार रास्ता खोजने करना चाहते हैं। मैं कल्पना टाइमआउट मान एक उपयोगकर्ता की मशीन चश्मा पर निर्भर कर सकते हैं, और मैं किसी भी अनावश्यक देरी नहीं करना चाहती।
# 5 में, यह बिल्कुल दर्ज टकराने के बाद place_changed कॉल नहीं करता है। फिर से, मैं मैन्युअल रूप से प्रस्तुत हैंडलर में एक place_changed ईवेंट सक्रिय करने की कोशिश की है, लेकिन क्योंकि getPlace() पहले से चयनित मान देता है, भले ही उपयोगकर्ता इनपुट क्षेत्र में इस पर टाइप किया है यह कोई प्रभाव नहीं है। इस को हल करने के एक तरीका यह परिवर्तन पर locMatches रीसेट करके है, लेकिन इस # 6 नीचे टूट जाता है।
$('#location').change(function() {
locMatch = false;
});
# 6 में, locMatch अभी भी पिछली क्लिक से सच है, तो यह अपेक्षित परिणाम देता है, लेकिन यह तकनीकी रूप से सही है क्योंकि place_changed अभी भी प्रपत्र जमा करने के बाद निकाल दिया जा रहा है नहीं है। # 5 के लिए उपरोक्त फिक्स इस मामले को तोड़ता है, हालांकि उपरोक्त सेटटाइम विधि इसे फिर से हल करता है।
मैं पूरे दिन अपने बालों को खींच रहा हूं, किसी भी सलाह की सराहना की जाएगी। धन्यवाद!
स्वत: पूर्ण सेवा असीमित है। परिणामस्वरूप सर्वर से वापस आने में समय लगता है। – geocodezip
लेकिन यह मुद्दा यहां नहीं है। परिणाम पहले से ही सभी उपरोक्त मामलों में वापस आ गए हैं। – hackel