2011-05-26 22 views
21

क्या टेक्स्ट इनपुट तत्व में कोई परिवर्तन ईवेंट नहीं है? जब मैं एक टेक्स्ट इवेंट हैंडलर को एक टेक्स्ट इनपुट में संलग्न करता हूं तो इसे निकाल दिया नहीं जा रहा है। कीप को निकाल दिया गया है, लेकिन बदलाव का पता लगाने के लिए कीप पर्याप्त नहीं है क्योंकि इनपुट में पाठ दर्ज करने के अन्य तरीके स्पष्ट रूप से हैं।jQuery टेक्स्टबॉक्स परिवर्तन घटना

+2

शायद यह मदद करेगा: http://stackoverflow.com/questions/1481152/jquery-how-to-detect-a-textboxs-content-has-changed – Bashwork

+0

क्या आप $ ('इनपुट') का उपयोग कर रहे हैं। बदलें (फ़ंक्शन() {कुछ करें}); ? – tenshimsm

+0

हाँ मैं .change और .keyup का उपयोग कर रहा था, लेकिन वे पर्याप्त नहीं हैं, कृपया नीचे मेरा जवाब देखें ... – jcvandan

उत्तर

4

इस पर कोई वास्तविक समाधान नहीं है - यहां तक ​​कि ऊपर दिए गए अन्य प्रश्नों के लिंक में भी। अंत में मैंने setTimeout का उपयोग करने का निर्णय लिया है और एक विधि को कॉल किया है जो हर सेकेंड की जांच करता है! एक आदर्श समाधान नहीं है, लेकिन एक समाधान जो काम करता है और जिस कोड को मैं कॉल कर रहा हूं वह इतना आसान है कि हर समय कॉल पर प्रदर्शन पर असर न हो।

function InitPageControls() { 
     CheckIfChanged(); 
    } 

    function CheckIfChanged() { 
     // do logic 

     setTimeout(function() { 
      CheckIfChanged(); 
     }, 1000); 
    } 

आशा यह भविष्य में किसी को मदद करता है के रूप में यह लगता है कि इस को प्राप्त करने ईवेंट हैंडलर्स का उपयोग करने का कोई निश्चित तरीका है ...

14

इनपुट ईवेंट केवल फोकस खोने के बाद आग लगती है (और बदल दी गई थी)।

+3

यदि आप वास्तव में जानना चाहते हैं कि कोई भी पाठ कब बदलता है, उतना ही बदलता है, तो आप इनपुट को मतदान कर रहे हैं। यही है, एक फ़ंक्शन के साथ setInterval का उपयोग करें जो पहले के संग्रहीत मान में इनपुट के वर्तमान मान की तुलना करता है (फ़ंक्शन की तुलना में उच्च स्कोप वाले कुछ चर के माध्यम से)। यदि दो मान मेल नहीं खाते हैं, तो एक परिवर्तन हुआ। फिर, अगले मान के लिए वर्तमान मान को उस अन्य चर में संग्रहीत करें। – ventaur

28

<input> element के लिए HTML4 कल्पना निर्दिष्ट करता है निम्न स्क्रिप्ट घटनाओं उपलब्ध हैं:

onFocus, onBlur, onselect, onchange, onclick, ondblclick, onmousedown, onmouseup, onmouseover, onmousemove, onmouseout, onkeypress, onkeydown, onkeyup

यहाँ एक उदाहरण है कि इन सभी घटनाओं के लिए के लिए बाध्य है और पता चलता है कि http://jsfiddle.net/pxfunc/zJ7Lf/

हो रहा है मुझे लगता है कि आप को फ़िल्टर कर सकते जो घटनाओं को सही मायने में अपनी स्थिति के लिए प्रासंगिक हैं और पता लगाने क्या पाठ मान से पहले था और घटना के बाद एक परिवर्तन का निर्धारण करने के

+1

मैंने सभी को एक साथ परिवर्तन, फोकस, धुंध, कीप और माउसअप का उपयोग करने के बारे में सोचा - हालांकि माउसअप केवल तभी होता है जब माउस टेक्सबॉक्स पर हो, इसका मतलब है कि यह एक संदर्भ मेनू से पेस्ट करने वाला उपयोगकर्ता नहीं उठाता है जहां पेस्ट होने की संभावना है पाठ इनपुट के दायरे के बाहर – jcvandan

+1

नए ब्राउज़र जैसे 'पेस्ट' और' इनपुट 'ईवेंट का समर्थन करता है, मैंने उन्हें यहां ढूंढने के बाद जोड़ा, [jquery - सही माउस का पता लगाने के लिए कैसे करें जावास्क्रिप्ट का उपयोग करके पेस्ट करें?] (http: // stackoverflow.com/questions/441631/how-to-detect-right-mouse-click-paste-using-javascript)...heres [अद्यतन fiddle] (http://jsfiddle.net/pxfunc/zJ7Lf/1/) – MikeM

+0

संभावित रूप से उपयोगी लेकिन वास्तव में उनका उपयोग नहीं कर सकते हैं अगर उनके पास बहुत व्यापक समर्थन नहीं है! – jcvandan

21

मैं ने पाया है कि यह काम करता है:

$(document).ready(function(){ 
    $('textarea').bind('input propertychange', function() { 
     //do your update here 
    } 

}) 
+0

मैं AJAX के साथ इनलाइन को सत्यापित करने के लिए इसे व्यापक रूप से उपयोग करता हूं। मुझे लगता है कि चर्चा की जा रही नई उत्परिवर्तन घटनाओं में से कुछ इस कार्यक्षमता को प्रतिस्थापित करेंगे लेकिन इस समाधान का परीक्षण फ़ायरफ़ॉक्स, क्रोम, आईई 10 और सफारी में किया गया है और यह काम करने के लिए जाना जाता है। –

1

आप इसे प्राप्त कर सकते हैं:

$(document).ready(function(){    
    $('#textBox').keyup(function() {alert('changed');}); 
}); 

या परिवर्तन के साथ (संभाल प्रति सही क्लिक के साथ पेस्ट):

$(document).ready(function(){    
    $('#textBox2').change(function() {alert('changed');}); 
}); 

यहाँ मेरे लिए Demo

+2

क्या होगा यदि कोई व्यक्ति सही क्लिक करता है और टेक्स्टबॉक्स में चिपकाता है? – jcvandan

+0

डेमो की जांच करें, इसकी हैंडलिंग कॉपी-पेस्ट भी –

+0

हाँ, यह दायाँ-क्लिक पेस्टिंग को संभाल नहीं लेता है और फिर – PandaWood

0
$('#input').on("input",function() {alert('changed');}); 

काम करता है।

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