2008-12-05 12 views
27

मेरे पास एक बदले हुए ईवेंट के साथ एक टेक्स्टबॉक्स है। जब उपयोगकर्ता टेक्स्टबॉक्स को पॉप्युलेट करने के लिए स्वत: पूर्ण सुविधा का उपयोग करता है तो यह ईवेंट क्यों नहीं आग लगती है?स्वत: पूर्ण होने पर जावास्क्रिप्ट ऑनचेंज ईवेंट क्यों नहीं आग लगती है?

मैं इंटरनेट एक्सप्लोरर के साथ काम कर रहा हूं। क्या इस समस्या को हल करने के लिए मानक और अपेक्षाकृत सरल समाधान है, बिना मुझे स्वत: पूर्ण सुविधा अक्षम करने के लिए?

उत्तर

17

पिछली बार मुझे यह समस्या थी, मैं इसके बजाय इंटरनेट एक्सप्लोरर के लिए onpropertychange ईवेंट का उपयोग कर समाप्त हुआ। मैंने उस here on MSDN के बारे में पढ़ा: यह इसके आसपास जाने का अनुशंसित तरीका है।

+0

लेकिन जब भी उपयोगकर्ता कुंजी दबाता है तो यह आग लग रहा है। क्या मुझसे यहां कुछ गलत हो रहा है ? – Preets

+1

दुर्भाग्य से यह कैसे काम करता है। लेकिन मुझे अभी यह संसाधन मिला है, जो इस मुद्दे को एक अच्छे तरीके से संबोधित करता है: http://jehiah.cz/archive/onchange-and-autocomplete –

+2

नोट: ऑनप्रोपर्टीयचेंज अब कम से कम IE9 में काम करने लगता है, कम से कम मेरे परीक्षण में –

12

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

लिए
<input type="text" name="txtTest" value="" onfocus="this.originalvalue=this.value" onblur="if (this.value != this.originalvalue) alert('Test has changed')"/> 
+2

यह क्रोम के नवीनतम संस्करण में मेरे साथ हो रहा था, इसलिए स्पष्ट रूप से यह एक आईई विशिष्ट चीज नहीं है। 'Onblur' मेरी समस्या तय की। – DanO

+0

ऑनब्लूर ने भी मेरी समस्या तय की, और आईई 7,8,9 और 9 कंप में काम किया। धन्यवाद –

+2

यह मेरे लिए बहुत अच्छा काम करता है - यहां मेरा जर्सीफाइड अनुवाद है: '$ (" # my-field ")। फोकस (फ़ंक्शन() {this.originalvalue = this.value})। धुंध (फ़ंक्शन() {if (this। मूल्य! = this.originalvalue) अलर्ट ('बदला')}); ' –

1

मैं सिर्फ स्वत: पूर्ण पाठ बॉक्स के लिए बंद कर देते हैं मैं एक पाठ परिवर्तन घटना

'Turn off Auto complete 
'(it needs to fire the text change event) 
txtYourTextBox.Attributes.Add("AutoComplete", "off") 

बस डाल कि पृष्ठ लोड सक्रिय होने की आवश्यकता।

वैकल्पिक रूप से, आप input तत्व या पूरे form पर अपने मार्कअप करने के लिए विशेषता जोड़ सकते हैं:

<input type=text autocomplete=off> 

या

<form autocomplete=off> 
+1

यह वास्तव में एक समाधान नहीं है। स्वत: पूर्ण उपयोगकर्ताओं के लिए उपयोगी है। सवाल यह है कि इसके साथ कैसे काम करना है, इसे अक्षम न करें। –

+1

मुझे यह पसंद है! ब्राउज़र निर्माताओं को इन फ्लफ सुविधाओं के लिए हमें बेहतर समर्थन देने के लिए मजबूर करें, ताकि हम उनके साथ काम कर सकें ... अन्यथा हम उन्हें अक्षम कर देते हैं! – eselk

+1

यह एक समाधान है क्योंकि यह एक ऐसी सुविधा को बंद कर देता है जो काम नहीं कर रहा है। मेरे पास एक ऐसा फॉर्म है जो प्रत्येक फ़ील्ड को मान्य करता है, और जब वे स्वत: भर जाते हैं, तब भी वे त्रुटि में दिखाते हैं। मैं ऑटोफिल का उपयोग नहीं करना चाहूंगा, फिर एक टूटा हुआ फॉर्म होगा। यह अच्छा होगा अगर ऑटोफ़िल होने पर ब्राउज़र विक्रेता एक ईवेंट उठाएंगे। –

4

मैं बस में पाया गया कि using jQuery 1.4 to set change event इस समस्या को हल कर सकते हैं। यदि आप पहले से ही jQuery से परिचित हैं तो यह इस समस्या का सबसे आसान समाधान प्रतीत होता है।

+1

मैं jquery 1.7.1 का उपयोग कर रहा हूं और टैब कुंजी के साथ स्वत: पूर्ण प्रविष्टि चुनना परिवर्तन घटना को फायर नहीं कर रहा था। मैंने टिम सी के समाधान का इस्तेमाल किया। –

6

बिल्डिंग टिम सी के जवाब पर, यहाँ सरल jQuery मैं के साथ आया एक पृष्ठ पर सभी पाठ बक्से के लिए इस संभाल करने के लिए है:

$("input[type=text]").bind("focus change",function(){ 
    this.previousvalue = this.value; 
}).blur(function(){ 
    if (this.previousvalue != this.value){ 
     $(this).change(); 
    } 
}) 

आप onchange कई बार फायरिंग की परवाह नहीं करते हैं, तो आप यह आसान बनाने के कर सकते हैं:

$("input[type=text]").blur(function(){ 
    $(this).change(); 
}) 
1

मैंने पाया कि निम्नलिखित jQuery (v1.10 +) जावास्क्रिप्ट पाठ स्वत: पूर्ण HTML पाठ इनपुट फ़ील्ड के लिए किया जा रहा है के मामले में काम करता है। इस पर मैक ओएस एक्स 10.8.5 सफारी 6.1.1 में कम से कम मज़बूती से काम करने के लिए परीक्षण किया गया था, लेकिन यह भी अन्य अनुरूप ब्राउज़र में काम करना चाहिए: के लिए महत्वपूर्ण

$("input:text[id=text_field_id]").bind("focus change keyup blur", function(event) { 
// handle text change here... 
}); 

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

सीधे शब्दों में, या id विशेषता का उपयोग कर अपने क्षेत्र का उल्लेख करने हैं, तो आपके पाठ क्षेत्र के id विशेषता मान text_field_id की जगह अपने वांछित पाठ इनपुट क्षेत्र के लिए प्रासंगिक चयनकर्ता के साथ ऊपर "input:text[id=text_field_id]" कोड के स्थान पर।

संबंधित मुद्दे