【问题标题】:Scope: passing a local variable over to a global variable in JavaScript范围:将局部变量传递给 JavaScript 中的全局变量
【发布时间】:2018-09-02 02:45:43
【问题描述】:

我在将函数内的局部变量传递给另一个全局变量时遇到了麻烦,以便在模型中的其他地方使用它。

这个想法是在 HTML 中创建一个输入字段并在其中输入字符串。我在帮助下设法获取了输入字符串,但我无法在初始函数之外获取它们。

HTML

<form>
    <input type="text" name="city" placeholder="enter city here">
    <input type="submit" value="Submit">
</form>

JavaScript:

var place;

$('form').on('submit', function(e) {
    e.preventDefault();
    var city = $('input[name=city]').val();
    place = city;
});

console.log(place);

如果我将“console.log”放在place = city 的正下方,我就会以正确的方式获得所有输入。然而,现在的代码方式只在控制台中借出undefined

【问题讨论】:

  • 点击提交按钮后place的值会发生变化,而当提交事件绑定到表单本身时会打印console.log。

标签: javascript html input scope field


【解决方案1】:

因为submit 还没有被解雇。所以当然什么都没有改变。如果您需要函数中的值,您可以将其写入 async 并等待在触发事件时解决的承诺。

【讨论】:

  • 它确实着火了。在输入并点击ENTERSUBMIT 之后,它会记录字符串,但前提是console.log 在大括号内。
  • @iBim'sdaMichi:你不了解执行流程。 on('submit', ... 只添加了一个侦听器,该侦听器将在触发事件时执行,然后立即执行它后面的代码。所以你订阅了这个事件。然后直接记录一个还没有赋值的变量。您分配变量的事件侦听器中的代码只会在整个代码运行很久之后才会执行。
  • 不确定我是否完全理解。因此有必要以某种方式停止事件侦听器以使执行流程继续到console.log 以实际显示全局变量?
  • 是的,或多或少,如果您使用async 编程。本质上,所有访问都必须在事件处理程序执行后发生。您可以注册另一个事件并在此处理程序之后触发它,并且您的变量将具有该点的值(例如,添加另一个带有单击侦听器的按钮并在提交后单击它)。
  • 归结为您想在何时何地使用该值。如果您只需要一次,您可以将所有代码直接移动到侦听器中并完全删除全局变量。
猜你喜欢
  • 1970-01-01
  • 2011-09-10
  • 2012-11-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-07
  • 1970-01-01
  • 2017-03-05
相关资源
最近更新 更多