javascript - 在 onClick 中调用时,JavaScript 函数内未定义全局变量

标签 javascript dom dom-events

在 HTML 表单中,我想在单击按钮时显示用户输入。这是通过调用 JavaScript 函数来完成的。用户输入保存在一个变量中,然后在函数内使用该变量。问题是,函数无法识别 var,除非它是在其中定义的。

以下是HTML和JS代码。查看 ( https://dl.dropboxusercontent.com/u/4301151/stackoverflow/varNoDefined.html )

<p><label>Name:</label>
<input type="text" name="userName" id="userName" placeholder="e.g John Lewis"/> 
</p>
    
<input type="submit" name="submitButton" value="Display" onclick="run()"/>
<p>Name Provided: <label id="outputUserName"></label></p>


var userName =  document.getElementById("userName").value;
function run() {document.getElementById("outputUserName").innerHTML = userName;}

如果函数内包含以下内容,它将正常工作:

document.getElementById("outputUserName").innerHTML = document.getElementById("userName").value;

或者如果我在函数内定义 var

我需要 var 是全局的,以便将它与其他函数一起使用,而不是多次定义它

最佳答案

The problem, the function doesn't recognize the var unless it's defined inside it.

不,这不是问题。该变量已被识别,但它没有您想要的值。

您正在尝试在用户键入任何内容之前读取输入的值。 userName 将仅保存一个空字符串。您可以通过为输入提供默认值来轻松验证这一点:

<input type="text" name="userName" id="userName" value="default value"/>

DEMO

您必须在需要/想要时读取该值。作为妥协,您可以保留对 DOM 元素的引用作为全局变量:

var userName =  document.getElementById("userName");
function run() {
    document.getElementById("outputUserName").innerHTML = userName.value;
}

同样相关:Why does jQuery or a DOM method such as getElementById not find the element?

关于javascript - 在 onClick 中调用时,JavaScript 函数内未定义全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26558155/

相关文章:

javascript - 从 jQuery 对象派生 HTMLElement 对象

javascript - 有没有办法知道链接/脚本是否仍在挂起或失败

Javascript 内存泄漏 : why would assigning object to null work?

javascript - CustomEvent IE8 支持,如何传递参数?

javascript - Video.js 自定义播放器控件

javascript - x 秒后自动打开 Bootstrap Modal

javascript - jQuery DOM 实现

javascript - 使用 addEventListener 的处理程序中 "this"的值

javascript - 如何同步链式 jQuery Promise 的顺序

php - 从不同的页面文件中显示和隐藏 DIV 类