2010-07-09 3 views
13

यह पता लगाने के लिए कि उपयोगकर्ता जेएस के साथ टेक्स्टरेरा में किस पाठ को चिपकाता है?ctrl + v के साथ चिपका हुआ टेक्स्ट खोजें या राइट क्लिक करें -> पेस्ट

+2

संभव डुप्लिकेट [कैसे फेसबुक पता लगाता है जब के रूप में चिपकाया गया एक लिंक] (http://stackoverflow.com/questions/1891145/how-does-facebook-detect-when- ए-लिंक-ए-द-पेस्टेड) ​​ –

+0

नोप, उदाहरण के लिए मैं "टेस्ट टेक्सटेरा" पेस्ट करता हूं, मैं यह जानना चाहता हूं कि कौन सा टेक्स्ट पेस्ट किया गया है, इस मामले में - "टेस्ट टेक्स्टरेरा" – lam3r4370

+0

शायद आप उस क्रॉस-ब्राउजर को नहीं कर सकते ... – galambalazs

उत्तर

16

आप अधिकांश ब्राउज़र में पेस्ट (विशेष रूप से नहीं फ़ायरफ़ॉक्स 2 हालांकि) का पता लगाने के पेस्ट घटना इस्तेमाल कर सकते हैं मदद मिल सकती है के बाद। जब आप पेस्ट ईवेंट को संभालते हैं, तो वर्तमान चयन रिकॉर्ड करें, और फिर एक संक्षिप्त टाइमर सेट करें जो पेस्ट पूरा होने के बाद फ़ंक्शन को कॉल करता है। यह फ़ंक्शन लंबाई की तुलना कर सकता है और पता चलेगा कि चिपकाए गए सामग्री को कहां देखना है। निम्नलिखित की तरह कुछ। ब्रेवटी के लिए, फ़ंक्शनएरा चयन प्राप्त करने वाला फ़ंक्शन आईई में काम नहीं करता है। यहाँ कुछ है कि नहीं करता है के लिए देखें: How to get the start and end points of selection in text area? आईई 8 पर

function getTextAreaSelection(textarea) { 
    var start = textarea.selectionStart, end = textarea.selectionEnd; 
    return { 
     start: start, 
     end: end, 
     length: end - start, 
     text: textarea.value.slice(start, end) 
    }; 
} 

function detectPaste(textarea, callback) { 
    textarea.onpaste = function() { 
     var sel = getTextAreaSelection(textarea); 
     var initialLength = textarea.value.length; 
     window.setTimeout(function() { 
      var val = textarea.value; 
      var pastedTextLength = val.length - (initialLength - sel.length); 
      var end = sel.start + pastedTextLength; 
      callback({ 
       start: sel.start, 
       end: end, 
       length: pastedTextLength, 
       text: val.slice(sel.start, end) 
      }); 
     }, 1); 
    }; 
} 

var textarea = document.getElementById("your_textarea"); 
detectPaste(textarea, function(pasteInfo) { 
    alert(pasteInfo.text); 
    // pasteInfo also has properties for the start and end character 
    // index and length of the pasted text 
}); 
+0

बहुत बहुत धन्यवाद! – lam3r4370

+0

क्या यह हर 1 मिलीसेकंड में मतदान करता है? – chug2k

+0

@ chug2k: नहीं, यह प्रत्येक पेस्ट के बाद एक बार 1 मिलीसेकंड (या इसके बजाय ब्राउज़र जो भी लागू होता है) के बाद उस फ़ंक्शन को चलाता है। –

1

आप

function submitenter(myfield,e) 
    { 
    var keycode; 
    if (window.event) keycode = window.event.keyCode; 
    else if (e) keycode = e.which; 
    else return true; 
    if (keycode == //event code of ctrl-v) 
    { 
     //some code here 
    } 

    } 

    <teaxtarea name="area[name]" onKeyPress=>"return submitenter(this,event);"></textarea> 
+1

हां, लेकिन "यहां कुछ कोड" के स्थान पर क्या होगा, अगर मैं यह जानना चाहता हूं कि उपयोगकर्ता किस पाठ को चिपकाता है? – lam3r4370

1

वर्क्स - 10

पेस्ट कमांड कई चरणों की आवश्यकता है सक्षम करने के लिए कस्टम कोड बना रहा है।

  1. पेस्ट शॉर्टकट मेनू आइटम को सक्षम करने के onbeforepaste स्थिति में गलत पर घटना वस्तु returnValue सेट करें।
  2. ईवेंट ऑब्जेक्ट रिटर्न सेट करके क्लाइंट के डिफ़ॉल्ट व्यवहार को रद्द करें ऑनपेस्ट ईवेंट हैंडलर में गलत के लिए वॉल्यूम। यह केवल ऑब्जेक्ट्स पर लागू होता है, जैसे टेक्स्ट बॉक्स, जिनके लिए डिफ़ॉल्ट व्यवहार परिभाषित किया गया है।
  3. क्लिपबोर्ड डेटा ऑब्जेक्ट की getData विधि के माध्यम से चयन पेस्ट करने के लिए एक डेटा प्रारूप निर्दिष्ट करें।
  4. कस्टम पेस्ट कोड निष्पादित करने के लिए ऑनपेस्ट ईवेंट में विधि का आह्वान करें।

    • शॉर्टकट मेनू प्रदर्शित और पेस्ट को चुनें करने के लिए राइट-क्लिक करें:

इस घटना आह्वान करने के लिए, निम्न में से एक है।

  • या CTRL + V दबाएं।
  • उदाहरण

    <HEAD> 
    <SCRIPT> 
    var sNewString = "new content associated with this object"; 
    var sSave = ""; 
    // Selects the text that is to be cut. 
    function fnLoad() { 
        var r = document.body.createTextRange(); 
        r.findText(oSource.innerText); 
        r.select(); 
    } 
    // Stores the text of the SPAN in a variable that is set 
    // to an empty string in the variable declaration above. 
    function fnBeforeCut() { 
        sSave = oSource.innerText; 
        event.returnValue = false; 
    } 
    // Associates the variable sNewString with the text being cut. 
    function fnCut() { 
        window.clipboardData.setData("Text", sNewString); 
    } 
    function fnBeforePaste() { 
        event.returnValue = false; 
    } 
    // The second parameter set in getData causes sNewString 
    // to be pasted into the text input. Passing no second 
    // parameter causes the SPAN text to be pasted instead. 
    function fnPaste() { 
        event.returnValue = false; 
        oTarget.value = window.clipboardData.getData("Text", sNewString); 
    } 
    </SCRIPT> 
    </HEAD> 
    <BODY onload="fnLoad()"> 
    <SPAN ID="oSource" 
         onbeforecut="fnBeforeCut()" 
         oncut="fnCut()">Cut this Text</SPAN> 
    <INPUT ID="oTarget" TYPE="text" VALUE="Paste the Text Here" 
         onbeforepaste="fnBeforePaste()" 
         onpaste="fnPaste()"> 
    </BODY> 
    

    पूर्ण दस्तावेज़: http://msdn.microsoft.com/en-us/library/ie/ms536955(v=vs.85).aspx

    3

    काफी एक पुराने धागा, लेकिन अब आप http://willemmulder.github.com/FilteredPaste.js/ बजाय का उपयोग हो सकता है। यह आपको टेक्स्टरेरा या संतुष्ट करने योग्य चीज़ों को नियंत्रित करने देगा।

    7

    एचटीएमएल 5 पहले से ही onpaste न केवल <input/>, लेकिन यह भी संपादन योग्य तत्वों प्रदान करता है (<p contenteditable="true" /> , ...)

    <input type="text" onpaste="myFunction()" value="Paste something in here"> 
    

    More info here

    की
    +2

    सावधान रहें, यह एक वेब मानक नहीं है। https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/onpaste। (भी, एमडीएन वेब एपीआई के लिए डब्ल्यू 3 स्कूल्स की तुलना में अधिक विश्वसनीय है) –

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