JavaScript选择HTMLInputElement在我没有预料到的情况下起了作用

JavaScript选择HTMLInputElement在我没有预料到的情况下起了作用,javascript,html,asp.net-mvc-4,Javascript,Html,Asp.net Mvc 4,我有下面的HTML页面,我需要在HTMLInputElement中向mineJavaScript函数提供输入值 <input id="input"> <span> <button onclick="mine(input)">Mine!</button> </span> mine: function (input) { alert(input.value); }, 矿 矿山:功能(输入){ 警报(输入值); },

我有下面的HTML页面,我需要在
HTMLInputElement
中向
mine
JavaScript函数提供输入值

<input id="input">
<span>
    <button onclick="mine(input)">Mine!</button>
</span>

mine: function (input) {
    alert(input.value);
},

矿
矿山:功能(输入){
警报(输入值);
},
我打算将控件Id传递到函数中,然后查找并操作该控件。我想我需要使用类似于
document.getElementById
或其
JQuery
等价物的东西

然而,我惊讶地发现我只能使用
input.value

这是如何工作的?

这是因为id被用作
窗口(全局对象)上的属性,该窗口指向具有id的节点

你可以看看上面的规格

不建议使用此行为,因为它更像是传统支持的“功能”,如果您与其他变量发生冲突,例如,如果您使用了id
“top”
,或者如果您有另一个节点的名称属性首先匹配,则可能会产生意外的结果

  • 结果也可能是HTMLCollection而不是HTMLElement
  • 如果还没有该值的标识符(例如,您
    var
    d它或它是一个本机对象,如
    alert
    ),则结果将是来自的第一个匹配项
  • 子窗口的名称
  • 具有此值的name属性的所有节点
    • 如果只有一个节点,则返回该节点。否则返回HTMLCollection
  • id属性具有此值的节点
正如您所看到的,这种行为很容易导致意外的结果

不要使用它。