JQuery

2010-02-11 22 views
13

के साथ टेक्स्टटेरा में चिपका हुआ टेक्स्ट कैप्चर करें मुझे JQuery का उपयोग करके टेक्स्ट क्षेत्र का पेस्ट ईवेंट लेना होगा। मैं निम्नलिखित कोड की कोशिश की है लेकिन यह काम नहीं कर रहा है ...JQuery

$(document).ready(function() 
{ 
    $('#txtcomplaint').keyup(function() 
    { 
    TextCounter('txtcomplaint','counterComplaint', 1000); 
    }) 
    $('#txtcomplaint').onpaste(function() 
    { 
    alert() 
    //TextCounter('txtcomplaint','counterComplaint', 1000); 
    }) 
}); 

उत्तर

21

आप इस

$("#txtcomplaint").bind('paste', function(e) { 
    var elem = $(this); 

    setTimeout(function() { 
     // gets the copied text after a specified time (100 milliseconds) 
     var text = elem.val(); 
    }, 100); 
}); 
+0

यदि आप पेस्ट करने के लिए Ctrl + V दबाते हैं तो यह विधि काम करती है। लेकिन अगर आप माउस पर राइट क्लिक करते हैं और पेस्ट का चयन करते हैं तो यह काम नहीं करता है। – JohnnyLinTW

+6

मुझे लगता है कि अगर $ ("# txtcomplaint") में परिवर्तन होता है। बाइंड ('पेस्ट', शून्य, फ़ंक्शन (ई) ... और यह Ctrl + V और माउस पेस्ट के लिए ठीक काम करता है। – JohnnyLinTW

6
$('#txtcomplaint').bind('paste', function(e){ alert('pasting!') }); 

अतिरिक्त संसाधन के लिए एक नज़र here ले।

+0

आपको इस विधि का उपयोग करके कॉपी किया गया टेक्स्ट नहीं मिलेगा। – rahul

+0

@rahul: वह केवल टेक्स्ट इंकिंग पorpोइज़ के लिए इस घटना का उपयोग करना चाहता है। –

1

मैं अंत में यह मिल गया के लिए 1) टाइपिंग, 2) खींचें और ड्रॉप, 3) Ctrl-V का काम करने के लिए की तरह कुछ कर सकते हैं और 4) एक माउस के संदर्भ मेनू से पेस्ट

 $(document).on("paste drop", '.taValue', function (e) { 
      myHandler.call(e.target, e); 
     }); 

पाठ क्षेत्र पर KeyUp घटना पहले से ही काम किया: क्लिक करें, लेकिन मैं पेस्ट देते हैं और दस्तावेज़ के लिए संचालकों ड्रॉप (जहां 'taValue' textareas मैं नजर रखने के लिए कोशिश कर रहा हूँ के वर्ग है) किया था। अगली समस्या यह थी कि टेक्स्टरेरा में पाठ वास्तव में बदलने से पहले पेस्ट और ड्रॉप इवेंट निकाल दिए जाते हैं। मेरे मामले में मैं नए पाठ की तुलना मूल पाठ से करना चाहता था। मैं एक setTimeout का सहारा लिया:

function myHandler(e) { 
     if (e && (e.type === "drop" || e.type === "paste")) { 
     var me = this; 
     setTimeout(function() { myHandler.call(me) }, 200); 
     }... [more code to do the comparison] 

मैं इस तरह बातों के लिए समय समाप्ति का उपयोग कर से नफरत है, लेकिन यह काम करता है (जब मैं एक 100ms अंतराल की कोशिश की, उसने ऐसा नहीं किया)।

$("#item_name").bind("input change", function() {}); 

शायद बदल आवश्यक नहीं है:

0

यह सबसे अधिक उपयोगी समाधान है।