0

我有一个输入字段<input type="text" name="input">用javascript中的文本设置输入值

我也有一些联系

<div> 
<a href="#">first link</a> 
<a href="#">second link</a> 
... 
</div> 

我想让一个链接,用户点击与链接的值设置输入的值。

我想我应该这样做

const input = document.getElementById('input'); 

document.getElementsByTagName('a').forEach(function() { 
    this.onclick = function() { 
    input.value = this.innerHTML(); 
    } 
}); 

,但我知道,document.getElementsByTagName('a')不返回数组,所以这是不可能的,我不知道这是正确的做法。

+0

使用一个简单的for循环:'VAR链接= document.get ElementsByTagName( 'A');对于(var i = 0,n = a.length; i mplungjan

+0

您可以使用Array.form(),它将nodeList转换为Array –

回答

2

getElementsByTagName()返回HTMLCollection

用法按照文档:

的的HTMLCollection接口表示元素的一般集合(类似于参数阵列状物体)(按文档顺序),并提供方法和属性用于从列表中选择。

// document.forms is an HTMLCollection 

elem1 = document.forms[0]; 
elem2 = document.forms.item(0); 

alert(elem1 === elem2); // shows: "true" 

这意味着你应该能够把你的结果像一个数组(包括使用.length)。

2

首先,Dom列表不是正常的数组,因此forEach不起作用。 其次,innerHTML不是函数,它的属性..

[] .slice.call,可以用来转换成一个正常的数组。

请尝试以下。 - >

const input = document.getElementById('input'); 
 

 
[].slice.call(document.getElementsByTagName('a')). 
 
forEach(function (e) { 
 
    e.onclick = function (evt) { 
 
    evt.preventDefault(); 
 
    input.value = this.innerHTML; 
 
    } 
 
});
<div> 
 
<a href="#">first link</a> 
 
<a href="#">second link</a> 
 
</div> 
 

 
<input id="input" type="text">

+0

您可能想要阻止Default()也不要跟随链接 – mplungjan

+0

在这种情况下,它们是空的哈希爆炸声,所以不会做任何事情。但是你的权利,使用preventDefault可能是一个好习惯。我会更新! – Keith

0

试试这个如下:

https://jsfiddle.net/7h1a3p4x/5/

var el = document.getElementsByClassName("link"); 
 
for (var i = 0; i < el.length; i++) { 
 
    el[i].addEventListener('click', sendData, false); 
 
} 
 

 
function sendData() { 
 
    var input = document.getElementById("myinput"); 
 
    input.value = this.innerHTML; 
 
}
<input id="myinput" type="text" name="name" /> 
 
<div> 
 
    <a class="link" href="#">LINK 1</a> 
 
    <a class="link" href="#">LINK 2</a> 
 
</div>

+0

与使用onclick相比,使用addEventListener的兼容性较差。此外,您可能希望preventDefault()不要按照链接 – mplungjan

+0

@mplungjan感谢您的反馈和编辑 –

相关问题