3 回答
![?](http://img1.sycdn.imooc.com/5458655200013d9802200220-100-100.jpg)
TA贡献1856条经验 获得超17个赞
让我们一步一步地打破这个问题。
您没有从 w3school 复制完整的脚本,请复制它,因为与上述代码相关的“addEventListener”、“addActive”等函数很少。
inp.value = this.getElementsByTagName("input")[0].value;
这里this
指的是文档(window.document)this.getElementsByTagName("input")[0]
如果我们不写它,我们将得到未定义,因为在这里您将搜索的项目分配给搜索输入框中的第一个元素。
![?](http://img1.sycdn.imooc.com/5458478b0001f01502200220-100-100.jpg)
TA贡献1804条经验 获得超2个赞
如果您可以看到代码,您会发现当用户开始在输入字段上输入时,会出现一个包含建议的列表。当用户单击任何建议选项时,该值被设置为文本框。
所以在这里,在建议列表中,选项是这样生成的
<div>
<strong>A</strong>
fghanistan
<input type="hidden" value="Afghanistan">
</div>
我们在这个 div 元素上点击了监听器,你可以在它下面找到这个代码
this.getElementsByTagName 返回具有给定标签名称的元素的集合
码this.getElementsByTagName("input")[0]与标签名称搜索元件input下this(这是当前的div)。
[0]这是在返回的集合中的第一个查找,因此它找到具有 value 的输入元素Afganistan。哪个被设置为文本框值。
![?](http://img1.sycdn.imooc.com/54584cde0001d19202200220-100-100.jpg)
TA贡献1811条经验 获得超5个赞
正如您在下面的代码段中看到的,this关键字引用(内部处理程序)到输入元素本身。代码的作者使用this.getElementsByTagName("input")[0](但不清楚为什么以这种方式)可能是因为他想从其他输入复制值 - 但是您可以在不使用它的情况下设置该值(例如直接方式inp.value='some autocompleted vale',取决于您的情况)
inp.addEventListener("input", function(e) {
console.log(this.value, this);
})
<input id="inp" placeholder='type here'>
添加回答
举报