2015-02-09 193 views
0
window.onload = function(){ 
     var inputElement = document.getElementsByTagName('input'); 
     console.log(inputElement); 
     console.log(inputElement.hasAttribute('placeholder')); 
     if(inputElement.hasAttribute('placeholder')){ 
      console.log('true'); 
     } 
    }; 

我不断收到window.onload上的TypeError。可能有人点什么错,我试图检查输入的元素有一个占位符属性访问占位符属性

+0

仔细看:它是getElement ** s ByTagName - 复数。 – georg 2015-02-09 20:46:31

+0

就像你有一个* array *的元素,而不是元素本身。你需要循环检查每一个。 – 2015-02-09 20:47:33

+0

基本上[为什么getElementsByClassName不适合我的副本?它返回什么?](http://stackoverflow.com/questions/10693845/why-getelementsbyclassname-does-not-work-for-me-what-does-it-return)(但这是为'getElementsByTagName'而不是'... ClassName') – apsillers 2015-02-09 20:52:44

回答

0
document.getElementsByTagName 

所以你需要访问它的元素返回数组或节点列表或什么的。你试图做的是在列表上运行hasAttribute,这显然没有这样的功能。

你想要的是

var inputElement = document.getElementsByTagName('input')[0]; 

此外,如果没有输入要素,这将抛出一个错误,没有0指数或某事

+0

具体而言,它返回['HTMLCollection'](https://developer.mozilla.org/en-US/docs/Web/API/HTMLCollection)。 – Oriol 2015-02-09 20:48:58

+0

是的,这是我无法想到的,所以我写了什么,而不是:D – 2015-02-09 20:49:21

+0

yep @php_nub_qq我有一种感觉,它必须做一些与HTMLCollection,谢谢 – Raj 2015-02-09 20:59:37

0

如果你真的需要收集所有的输入和查找占位符,循环访问您在inputElement中收集的输入并检查每个输入。

我建议这样的事情(虽然,我也建议一些日志以指示在输入试验阳性的占位符;)):

window.onload = function() { 
    var inputElements = document.getElementsByTagName('input'); 

    for (i = 0; i < inputElements.length; i++) { 
     if (inputElements[i].hasAttribute('placeholder')) { 
      console.log('true'); 
     } 
    } 
}; 

如果需要访问特定一个,那么你将不得不找出一个唯一标识input的方法(例如,使用id属性)。然后你可以使用你正在尝试的方法: