JavaScript不会返回输入元素值

JavaScript不会返回输入元素值,javascript,html,forms,input,Javascript,Html,Forms,Input,我有一个我正在处理的输入元素。我将默认值设置为“权重”。我按下一个按钮后,JavaScript调用该函数。此函数的目的是返回输入元素的值。但是,它返回默认值,而不是文本框中键入的值 HTML: <input type="text" name="value1" onfocus="if (this.value=='Weight') this.value = ''" value="Weight"></input> 注意:变量“v1”已在文档前面声明为变量。但是,它没有被赋予

我有一个我正在处理的输入元素。我将默认值设置为“权重”。我按下一个按钮后,JavaScript调用该函数。此函数的目的是返回输入元素的值。但是,它返回默认值,而不是文本框中键入的值

HTML:

<input type="text" name="value1" onfocus="if (this.value=='Weight') this.value = ''" value="Weight"></input>
注意:变量“v1”已在文档前面声明为变量。但是,它没有被赋予一个值。此外,输入元素是名为“weight”的表单元素的子元素。

这是您的问题:

document.getElementById("submit").addEventListener("click", start());
仔细看看。这和你想象的不一样。应该是:

document.getElementById("submit").addEventListener("click", start);
您应该能够看到原因:
start()
首先由解释器计算为
undefined
,然后返回值
undefined
被传递给方法
EventTarget::addEventListener
。请注意,这显然不是您的意图


关于您的代码,正如我所提到的,它包含很多代码气味

许多全局变量声明 不仅到处都有很多变量,而且它们都是全局变量,这使得情况更糟。尝试在相应的函数和方法中重新定位它们

在HTML标记中混合代码 一方面你有

<input type="text" name="value2" onfocus="if (this.value=='Weight') this.value = ''" value="Weight"></input>
document.getElementById("submit").addEventListener("click", start());
这是个坏习惯。HTML用于声明结构,而不是编写逻辑代码。事实上,在某些环境中,例如为Chrome构建扩展时,内联JavaScript是严格禁止的

访问函数外部的变量 这是创建意大利面代码的好方法。随着时间的推移,您的应用程序最终将变得越来越复杂。访问本身未声明的变量将导致难以调试的错误。

这是您的问题:

document.getElementById("submit").addEventListener("click", start());
仔细看看。这和你想象的不一样。应该是:

document.getElementById("submit").addEventListener("click", start);
您应该能够看到原因:
start()
首先由解释器计算为
undefined
,然后返回值
undefined
被传递给方法
EventTarget::addEventListener
。请注意,这显然不是您的意图


关于您的代码,正如我所提到的,它包含很多代码气味

许多全局变量声明 不仅到处都有很多变量,而且它们都是全局变量,这使得情况更糟。尝试在相应的函数和方法中重新定位它们

在HTML标记中混合代码 一方面你有

<input type="text" name="value2" onfocus="if (this.value=='Weight') this.value = ''" value="Weight"></input>
document.getElementById("submit").addEventListener("click", start());
这是个坏习惯。HTML用于声明结构,而不是编写逻辑代码。事实上,在某些环境中,例如为Chrome构建扩展时,内联JavaScript是严格禁止的

访问函数外部的变量
这是创建意大利面代码的好方法。随着时间的推移,您的应用程序最终将变得越来越复杂。访问本身未声明的变量将导致难以调试的错误。

您可以发布jsbin或codepen吗?修改全局变量是一个很大的代码气味。您可能希望修改代码以避免将来出现错误。@DeveloperNodejs在我的问题中刚刚发布了CodePen链接。您可以发布jsbin或CodePen吗?修改全局变量是一个很大的代码气味。您可能希望修改代码以避免将来出现错误。@DeveloperNodejs刚刚在我的问题中发布了CodePen链接。@dave确定我会添加一个简短的解释。@dave确定我会添加一个简短的解释。