2009-09-11 20 views
28

मिल मैं एक समारोह में जब एक कुंजी दबाने एक पाठ बॉक्स पर होता है चलाने के लिए चाहते हैं, तो मैं इस कोड है:jQuery कुंजी दबाने() घटना पाठ

$("input[x]").keypress(function() { 
     DoX(); 
    }) 

यह ठीक काम कर रहा है, लेकिन मेरे समारोह में मैं चाहता हूँ पाठ बॉक्स

var textValue = ("input[x]").val(); 

में पाठ मूल्य के आधार पर कुछ करने के लिए अब समस्या यहां है कि यह एक कुंजी के द्वारा पीछे है, इसलिए यदि मेरे पाठ बॉक्स 'वह' कहते हैं और मैं एक 'l' टाइप करें, फिर मैं चाहता हूँ मेरा टेक्स्ट 'हेल' होने के लिए वैल्यू, लेकिन यह पिछले मान 'हे' को वापस कर रहा है क्योंकि संभवतः चरित्र को अभी तक टेक्स्ट बॉक्स में नहीं रखा गया है।

क्या यहां मेरे समारोह से 'हेल' प्राप्त करने का कोई तरीका है?

धन्यवाद :)

उत्तर

51

आप KeyUp घटना इस्तेमाल करने की कोशिश कर सकते हैं:

$(selector).keyup(function() { 
    var textValue = $(this).val(); 
    DoX(); 
}); 
9

उपयोग onkeyup, यह सही मूल्य दिखाएगा।

27

आप उपयोग कर फंस रहे हैं, तो किसी अन्य कारण से (ताकि आप के रूप में सुझाव KeyUp को नहीं बदल सकते हैं) तो आप अंतिम वर्ण की तरह टाइप किया प्राप्त कर सकते हैं के लिए keypressed यह:

$("input[x]").keypress(function (e) { 
    var c = String.fromCharCode(e.which); 
    //process the single character or 
    var textValue = $("input[x]").val(); 
    var fulltext = textValue + c; 
    //process the full text 

}); 
+2

'(" इनपुट [x] ") वैल()' होना चाहिए करने के लिए:। '$ (" इनपुट [x] ") वैल()' या और भी बेहतर:। '$ (This) .val() 'या इससे भी बेहतर:' this.value' –

+0

@ ओलेग जी धन्यवाद। –

+6

इस दृष्टिकोण के साथ समस्याओं में भाग लेने के बाद चेतावनी का एक शब्द - यह मानता है कि कर्सर हमेशा टेक्स्टबॉक्स टेक्स्ट के अंत में होता है। उदाहरण के लिए, यदि आप एक सामान्य संपादक विंडो में ई-एस-टी-होम-टी टाइप करते हैं, तो आपको "टेस्ट" मिलेगा, लेकिन इस जेएस का परिणाम "ईएसटीटी" होगा। –

0

देरी के बिना सेटटाइमआउट का उपयोग करें। कुंजीपटल ईवेंट पूरा होने के तुरंत बाद यह चला जाएगा ताकि आपके पास इनपुट का सही मूल्य होगा।

$("input[x]").keypress(function() { 
    setTimeout(DoX); 
}); 
संबंधित मुद्दे