2016-08-23 90 views
-2

我想实现复制到剪贴板功能使用javascript,这意味着复制文本区域中的文本,当用户单击复制按钮时。这是来自脚本的代码,旨在执行此功能。未捕获TypeError:text.select不是一个函数

var item = document.getElementsByClassName('js-copyBtn'); 

for(var i=0; i < item.length; i++){ 
    item[i].addEventListener('click', function(event){ 

     var text = document.getElementsByClassName('js-text'); 
     text.select(); 

     try{ 
      var successful = document.execCommand('copy'); 
      var msg = successful ? 'successful' : 'unsuccessful';  
      console.log('Copy was ' + msg); 
     } catch(err) { 
     console.log('Oops, unable to copy'); 
     } 
    }); 
} 

然而,当我运行此,我谷歌浏览器的控制台说遗漏的类型错误上得到一个错误:text.select不是一个函数。我也在其他浏览器上测试过,但得到相同的结果。还有人遇到过这个问题吗?

+2

的可能的复制[什么querySelectorAll,getElementsByClassName方法等getElementsBy \ *方法返回?](http://stackoverflow.com/questions/10693845/ what-do-queryselectorall-getelementsbyclassname-and-other-getelementsby-method) – JJJ

回答

1

getElementsByClassName返回找到的元素的HTMLCollection不是单个元素。 HTMLCollection的确没有select函数。

你可能想的第一个元素集合中

var text = document.getElementsByClassName('js-text'); 
text[0].select(); 
+0

我试过了doi不幸的是,它就像那个相同的错误 – r1993

+0

@ r1993 jsfiddle或它没有发生! – Jamiec

+0

我用文本[0] .select()替换了它;但是给同样的错误 – r1993

0

.select()方法确实检索字段中的文本。但是,您试图在元素数组var text = document.getElementsByClassName('js-text');上运行它。此方法返回具有该类名称的所有元素的数组。

如果只有一个这样的元素,您可以使用数组索引器来检索第一个元素。 var text = document.getElementsByClassName('js-text')[0];

或者,如果只有一个这样的元素,您可以考虑给这个元素一个id并使用document.getElementById()这将只返回一个元素。 (一个ID在页面上应该是唯一的)

+0

使用getElementsByClassName的原因是因为我的网页有多个副本到剪贴板功能,所以我给了所有textareas相同的类名 – r1993

+0

我知道这将工作只是一个元素,但是我将不得不为所有元素提供唯一的ID,并且有多个元素 – r1993

0

getElementByClassName返回一个元素数组 所以,你必须使用text [0] .select();

相关问题