2015-11-22 5 views
11

मुझे जावास्क्रिप्ट का कोई ज्ञान नहीं है, लेकिन मैं विभिन्न स्टैक   ओवरफ़्लो उत्तरों से बिट्स और बोल्ट का उपयोग करके इस कोड को एकसाथ रखने में कामयाब रहा। यह ठीक काम करता है, और यह एक अलर्ट बॉक्स के माध्यम से दस्तावेज़ में सभी चयनित चेकबॉक्सों की एक सरणी आउटपुट करता है।क्लिपबोर्ड पर एक जावास्क्रिप्ट चर के आउटपुट की प्रतिलिपि

function getSelectedCheckboxes(chkboxName) { 
    var checkbx = []; 
    var chkboxes = document.getElementsByName(chkboxName); 
    var nr_chkboxes = chkboxes.length; 
    for(var i=0; i<nr_chkboxes; i++) { 
    if(chkboxes[i].type == 'checkbox' && chkboxes[i].checked == true) checkbx.push(chkboxes[i].value); 
    } 
    return checkbx; 
} 

और यह कॉल करने के लिए मैं का उपयोग करें:

<button id="btn_test" type="button" >Check</button> 
<script> 
    document.getElementById('btn_test').onclick = function() { 
     var checkedBoxes = getSelectedCheckboxes("my_id"); 
     alert(checkedBoxes); 
    } 
</script> 

अब मैं जब मैं btn_test बटन उत्पादन सरणी checkbx क्लिपबोर्ड में कॉपी किया जाता है पर क्लिक करें ताकि इसे संशोधित करना चाहते हैं।

checkbx = document.execCommand("copy"); 

या

checkbx.execCommand("copy"); 

समारोह के अंत में और फिर बुला इसे पसंद:: मैं जोड़ने की कोशिश की

<button id="btn_test" type="button" onclick="getSelectedCheckboxes('my_id')">Check</button> 

लेकिन यह काम नहीं करता। क्लिपबोर्ड पर कोई डेटा कॉपी नहीं किया गया है।

+0

मुझे संदेह है कि आप क्लिपबोर्ड पर कच्चे जेएस ऑब्जेक्ट की प्रतिलिपि बना सकते हैं। 'execCommand ('copy') 'किसी पृष्ठ पर चयन की प्रतिलिपि बनाता है (यदि उपयोगकर्ता वरीयताओं में अनुमत है)। आप सरणी को स्ट्रिंग करने का प्रयास कर सकते हैं, फिर उसके साथ एक टेक्स्टरेरा पॉप्युलेट करें, टेक्स्टरेरा से सभी का चयन करें, और उसके बाद 'execCommand' के साथ प्रतिलिपि बनाएँ। पेस्ट करते समय, ईवेंट को कैप्चर करें, और सामग्री को सरणी में वापस पार्स करें। – Teemu

+0

ठीक है .. मुझे दिशा में इंगित करने के लिए धन्यवाद। मैंने सोचा कि शायद यह संभव नहीं था क्योंकि यह किसी भी प्रत्यक्ष खोज परिणामों को वापस नहीं प्रतीत होता था। तो मुझे लगता है कि जैसा आपने सुझाव दिया है मैं करने की कोशिश करूंगा। – harman

+0

यह शायद एक बेवकूफ सवाल है, लेकिन आप कच्चे जेएस ऑब्जेक्ट को कहां पेस्ट करेंगे? – Teemu

उत्तर

13

ठीक है, मुझे कुछ समय मिला और Teemu द्वारा सुझाव का पालन किया और मैं वही चाहता हूं जो मैं चाहता था।

तो यहां रुचि रखने वाले किसी भी व्यक्ति के लिए अंतिम कोड यहां दिया गया है। स्पष्टीकरण के लिए, यह कोड किसी निश्चित आईडी के सभी चेक किए गए चेकबॉक्स प्राप्त करता है, उन्हें checkbx नामक सरणी में आउटपुट करता है, और उसके बाद क्लिपबोर्ड पर अपना अद्वितीय नाम कॉपी करता है।

जावास्क्रिप्ट समारोह:

function getSelectedCheckboxes(chkboxName) { 
    var checkbx = []; 
    var chkboxes = document.getElementsByName(chkboxName); 
    var nr_chkboxes = chkboxes.length; 
    for(var i=0; i<nr_chkboxes; i++) { 
    if(chkboxes[i].type == 'checkbox' && chkboxes[i].checked == true) checkbx.push(chkboxes[i].value); 
    } 
    checkbx.toString(); 

    // Create a dummy input to copy the string array inside it 
    var dummy = document.createElement("input"); 

    // Add it to the document 
    document.body.appendChild(dummy); 

    // Set its ID 
    dummy.setAttribute("id", "dummy_id"); 

    // Output the array into it 
    document.getElementById("dummy_id").value=checkbx; 

    // Select it 
    dummy.select(); 

    // Copy its contents 
    document.execCommand("copy"); 

    // Remove it as its not needed anymore 
    document.body.removeChild(dummy); 
} 

और उसके HTML कॉल:

<button id="btn_test" type="button" onclick="getSelectedCheckboxes('ID_of_chkbxs_selected')">Copy</button> 
+1

क्या यह HTML तत्व बनाये बिना किया जा सकता है? उदाहरण के लिए कहें, जब मैं बटन या प्री-निर्दिष्ट तत्व पर क्लिक करता हूं तो मैं सिर्फ एक स्ट्रिंग को एक उपयोगकर्ता क्लिपबोर्ड पर कॉपी करना चाहता था? – VikingGoat

+1

मैं "इनपुट" के बजाय "textarea" का उपयोग करने की अनुशंसा करता हूं, इस तरह आप लाइन ब्रेक की प्रतिलिपि बना सकते हैं। –

7

बहुत उपयोगी। मैं क्लिपबोर्ड में JavaScript वैरिएबल मान की प्रतिलिपि करने के लिए इसे संशोधित: एक जवाब की

function copyToClipboard(val){ 
    var dummy = document.createElement("input"); 
    document.body.appendChild(dummy); 
    $(dummy).css('display','none'); 
    dummy.setAttribute("id", "dummy_id"); 
    document.getElementById("dummy_id").value=val; 
    dummy.select(); 
    document.execCommand("copy"); 
    document.body.removeChild(dummy); 
} 
8

lbrutti का विचार अच्छा है, लेकिन वह गलत कोड लिखते हैं!

function textToClipboard (text) { 
    var dummy = document.createElement("textarea"); 
    document.body.appendChild(dummy); 
    dummy.value = text; 
    dummy.select(); 
    document.execCommand("copy"); 
    document.body.removeChild(dummy); 
} 

पैरामीटर का मान के एक नव <textarea> बनाया मूल्य में डाला जाता है, जो तब है:

function copyToClipboard(text){ 
    var dummy = document.createElement("input"); 
    document.body.appendChild(dummy); 
    dummy.setAttribute('value', text); 
    dummy.select(); 
    document.execCommand("copy"); 
    document.body.removeChild(dummy); 
} 
copyToClipboard('Hello, World!') 
1

क्लिपबोर्ड किसी भी पाठ को कॉपी करने की सामान्य प्रयोजनों के लिए, मैं निम्नलिखित समारोह लिखा था चयनित, इसका मान क्लिपबोर्ड पर कॉपी किया गया है और फिर इसे दस्तावेज़ से हटा दिया जाता है।

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