यह 2012 है, पीसी के बाद के युग यहां है, और हमें अभी भी इस तरह के मूल के रूप में कुछ संघर्ष करना है। यह बहुत सरल होना चाहिए।तो की तरह, input
और onpropertychange
घटनाओं के संयोजन का उपयोग:
समय जैसे कि सपने को पूरा किया है, यहाँ यह, क्रॉस-ब्राउज़र करने के लिए सबसे अच्छा तरीका है जब तक
var area = container.querySelector('textarea');
if (area.addEventListener) {
area.addEventListener('input', function() {
// event handling code for sane browsers
}, false);
} else if (area.attachEvent) {
area.attachEvent('onpropertychange', function() {
// IE-specific event handling code
});
}
input
घटना IE9+, FF, Chrome, Opera and Safari का ख्याल रखती है, और onpropertychange
IE8 का ख्याल रखती है (यह आईई 6 और 7 के साथ भी काम करती है, लेकिन कुछ बग हैं)।
input
और onpropertychange
उपयोग करने का लाभ यह है कि वे अनावश्यक रूप से आग नहीं है (जब Ctrl
या Shift
कुंजी का उपयोग) की तरह है, इसलिए यदि आप टेक्स्टरेरा सामग्री बदलते समय अपेक्षाकृत महंगे ऑपरेशन चलाने की इच्छा रखते हैं, तो यह पर जाने का तरीका है। IE में जब पात्रों पाठ क्षेत्र से हटा दिया हैं न input
है और न ही onpropertychange
आग:
अब आईई, हमेशा की तरह, इस का समर्थन करने का एक आधा assed काम करता है। इसलिए यदि आपको IE में वर्णों को हटाने की आवश्यकता है, तो keypress
का उपयोग करें (keyup
/keydown
का उपयोग करने के विपरीत, क्योंकि वे केवल एक बार आग लगते हैं, भले ही उपयोगकर्ता दबाए और दबाए रखें)।
स्रोत: http://www.alistapart.com/articles/expanding-text-areas-made-elegant/
संपादित करें: ऐसा लगता है यहां तक कि इसके बाद के संस्करण समाधान परिपूर्ण नहीं, के रूप में ठीक ही टिप्पणी में कहा है: पाठ क्षेत्र पर addEventListener
संपत्ति की उपस्थिति करता नहीं मतलब आप कर रहे हैं एक सायन ब्राउज़र के साथ काम करना; इसी तरह attachEvent
संपत्ति की उपस्थिति आईई का अर्थ नहीं है। यदि आप चाहते हैं कि आपका कोड वास्तव में हवादार हो, तो आपको इसे बदलने पर विचार करना चाहिए। पॉइंटर्स के लिए Tim Down's comment देखें।
बस जोश ने पहले ही कहा था, उस पर ज़ोर देना चाहता था कि आपको कुंजीपटल का उपयोग करना चाहिए, इसके लिए कुंजीपटल नहीं: मुख्य रूप से बदलाव को टेक्स्टरेरा में बदलने से पहले कहा जाता है, इसलिए आप गलत लंबाई का उपयोग करेंगे (और आप डॉन वास्तव में नहीं जानते कि आप कैसे हैं: टाइपिंग या हटाना हो सकता है, और टेक्स्ट का चयन किया जा सकता है जिसका अर्थ है कि यह +/- 1 से अधिक है)। – brianmearns
मैं यहाँ -1 दे रहा हूँ, क्षमा करें! 'ऑनकीप' इनपुट पहचान के लिए एक भयानक घटना है। 'Oninput' और 'onpropertychange' (IE समर्थन के लिए) का उपयोग करें। Http://whattheheadsaid.com/2010/09/effectively-detecting-user-input-in-javascript देखें। –
"केवल" समस्या 'onchange' है ** ** ** संदर्भित नहीं है जब कोई संदर्भ-मेनू कट/पेस्ट होता है। – Tom