在事件上填充数组,并在事件函数处理程序外部访问它
Filling array on event and access it outside the event function handler
我试图用按钮的值填充事件(onclick)上的数组(将有不同的按钮具有不同的值,这就是为什么我使用数组),我希望能够访问事件处理程序函数之外的数组。这就是我到目前为止所尝试的,但我只是不知道如何访问事件处理程序函数之外的数组。
HTML:
<button value="5"> button </button>
<div> The value is: <span id="res"></span></div>
这里是脚本:
var n = [];
var val;
var ret;
function add(arr,val) {
arr.push(val);
return val;
}
document.body.addEventListener("click", function(event) {
if (event.target.nodeName == "BUTTON") {
val = event.target.value;
ret = add(n, val);
console.log(n); //these console.log are tests
console.log(ret);
}
console.log(ret); //also this
});
//need to access the array here
console.log(n); //obv doesn't work
console.log(ret); //same
document.getElementById("res").innerHTML = ret; //it remains undefined, obv
我知道为什么这不起作用(这是因为我在事件处理程序函数内做所有的事情),但我不能弄清楚如何做我想做的事情。
有什么建议吗?
您需要在回调中执行您想要执行的操作,而不是在此之前。原因是事件处理程序中的任何代码都不会在事件发生之前运行。仅仅声明变量并不会改变执行的顺序。
所以你需要输入
document.getElementById("res").innerHTML = ret;
在你的事件处理函数中。
更新(和简化)代码:
var n = [];
document.body.addEventListener("click", function(event) {
if (event.target.nodeName == "BUTTON") {
var val = event.target.value;
n.push(val);
console.log(n); //these console.log are tests
console.log(ret);
document.getElementById("res").innerHTML = val;
}
});
相关文章:
- keyup事件处理程序更改焦点不适用于快速键入
- 提示使用服务器端事件处理程序激活JavaScript
- 将事件处理程序绑定到任何可能的事件
- 正在将事件处理程序添加到不存在的类
- 在循环中附加事件处理程序时出现浏览器性能问题
- 在同一个javascript事件处理程序中调用不同的函数
- 有没有一种方法可以让内联事件处理程序在元素创建后立即执行
- React应用程序:道具在下一个事件后更新
- 检查事件处理程序参数
- 实现延迟的jquery更改事件处理程序
- 平均值.on(事件[,选择器][,数据],处理程序)
- 如何使用Node.js在JavaScript模块文件之间使用事件处理程序
- 如何使jQuery的“bind”或“on”事件处理程序幂等
- 如何在Win8Metro应用程序的Javascript代码中捕获自己的C#事件
- 带有参数的Javascript事件处理程序
- Jquery事件处理程序仅适用于匿名函数
- 如何从另一个处理程序内部取消JavaScript事件处理程序函数的执行
- 鼠标事件在OpenLaszlo应用程序中不起作用
- 如何在jQuery事件处理程序中存储和重用超时
- 如何向onClick事件处理程序传递一个接受参数的函数,并且仍然将该函数绑定到组件's”;这个“;上下文