2009-06-16 17 views
6

मुझे इनपुट टेक्स्ट प्रकार (यानी टेक्स्ट बॉक्स) के साथ समस्या का सामना करना पड़ रहा है।जावास्क्रिप्ट टेक्स्टबॉक्स इवेंट

मैंने टेक्स्ट बॉक्स पर onkeyup ईवेंट द्वारा उपयोग किया गया एक फ़ंक्शन लिखा है। रेखा इस तरह दिखता है:

<input type='TEXT' value='abc' onkeyup='changeSomething(this);'> 

लेकिन अब मैं समस्या यह है कि जब उपयोगकर्ता पहले दर्ज किए गए मूल्यों से मान का चयन करता, मैं नहीं किसी भी घटना है जब उपयोगकर्ता ड्रॉप डाउन से किसी भी पहले दर्ज किए गए मान का चयन करता हो रही है (का सामना करना पड़ रहा संपादित करें: मेरा मानना ​​है कि वह ब्राउज़र को स्वतः पूर्ण कर रहा है)।

क्या किसी के पास इसका समाधान है? :) इस मामले में

उत्तर

11

उपयोग onchange बजाय onkeyup

देखें: http://www.w3schools.com/jsref/event_onchange.asp

उदा

<input type='text' value='abc' onchange='changeSomething(this);' /> 

इस

संपादित करें चारों ओर दो बातें प्राप्त करने के लिए:
1) स्वत: पूर्ण मूल्यों तीर कुंजी और दर्ज/टैब का उपयोग करके चुना जा सकता है, और माउस का उपयोग करके। तीर कुंजी/enter.tab ऑनकीप घटनाओं को आग ... स्वत: पूर्ण बॉक्स में क्लिक करना, हालांकि, ऑनक्लिक घटना को आग नहीं करता है।
2) जैसे ही फोकस खो जाता है, वैसे ही बदले जाने की घटना आग लग जाती है अगर सामग्री बदल गई है। स्वत: पूर्ण मूल्यों का चयन करते समय फोकस खो नहीं जाता है।

अनिवार्य रूप से, इस बात की उचित गारंटी नहीं है कि ईवेंट को जिस तरीके से आप चाहते हैं उसे संसाधित किया जाएगा।

सबसे पहले, क्या आपको वास्तव में प्रत्येक कीस्ट्रोक को सुनने की ज़रूरत है? दूसरा, क्या आप स्वत: पूर्ण बंद करके बेहतर सेवा करेंगे? (जैसे <input type='text' value='abc' autocomplete='off' onkeyup='changeSomething(this);' />)

+1

+1 महत्वपूर्ण घटनाओं बेहद नाजुक होते हैं और माउस आधारित कॉपी/उदाहरण – annakata

+0

उत्कृष्ट बिंदु के लिए पेस्ट संभाल नहीं होगा के लिए जो चुनाव एक समाधान तत्व समय-समय पर है। कुंजीपटल/कीप्रेस, हालांकि, यदि आप कीबोर्ड संचालित/अनुमति देने योग्य इंटरफ़ेस प्रदान कर रहे हैं तो बहुत अच्छा है। इसके अलावा ... इतना उपयोगी नहीं है। –

+0

मैं इसे इस तरह देखता हूं: यदि आप में रुचि रखने वाली महत्वपूर्ण घटना है और फिर महत्वपूर्ण घटनाओं का उपयोग करें। यदि आप महत्वपूर्ण घटना के * प्रभाव * में रूचि रखते हैं तो कुछ और उपयोग करें। – annakata

3

यहाँ कोई भी परिवर्तन

<script type="text/javascript"> 

var changeWatcher = { 
    timeout: null, 
    currentValue: '', 
    watchForChange: function(el) { 
     if(el.value != this.currentValue) { 
      this.changed(el); 
     } 
     this.timeout = setTimeout(function() { 
      changeWatcher.watchForChange(el) 
     }, 200); 
    }, 
    cancelWatchForChange: function() { 
     clearTimeout(this.timeout); 
     this.timeout = null; 
    }, 
    changed: function(el) { 
     this.currentValue = el.value; 
     // do something with the element and/or it's value 
     //console.log(el.value); 
    } 
} 

</script> 
<input type='text' value='abc' onfocus='changeWatcher.watchForChange(this)' onblur='changeWatcher.cancelWatchForChange()' onchange='changeWatcher.changed(this)' /> 
+0

हमें इस मामले में से कोई भी घटना नहीं मिल रही है ... तो यह काम नहीं करेगा .. इसके लिए खेद है .. –

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