【发布时间】:2018-02-17 14:42:45
【问题描述】:
在 JavaScript 中,我试图设置一个接受参数的 onchange 回调。但是,我目前的做法会覆盖所创建的事件对象。实际上,我的目的并不需要该事件,但我想知道如何捕获事件和任何传入的参数,以防我的需求发生变化。
编辑:为清楚起见,这个 onchange 事件既可以通过编程方式调用,也可以由用户调用。可能有一个实例,我正在创建一个空的选择元素,以便用户可以选择他们想要的内容,或者基于其他交互创建一个填充的元素。
编辑:另外,下面是一个更大的代码库的简化示例。假设范围不是任何变量的全局。我真的在寻找如何专门捕获事件对象(通过用户交互调用时)和另一个对象(通过代码调用时)的答案。感觉好像让 atr 参数在不同的上下文中表示不同的东西是 hacky - 但我更多来自强类型背景,所以它可能只是我。
function update(atr) {
...
}
document.getElementById("myelement").onchange = update;
var atr = {"id":1,"param":"val1"};
// This gives me atr in the function as defined above
document.getElementById("myelement").onchange(atr);
// This way, however, gives me atr in the function as the event
document.getElementById("myelement").onchange();
我真正想要的是这样的:
function update(e, atr) {
// Now I have e as the event and atr as the value I've passed in
}
document.getElementById("myelement").onchange = update;
var atr = {"id":1,"param":"val1"};
// This gives me atr in the function as defined above
document.getElementById("myelement").onchange(atr);
但是上面的代码不起作用。我怀疑我必须对bind() 做点什么,但据我所知,我只是在函数中重写事件的 (this) 对象,就像我现在正在做的那样隐式.
在这个问题Similar Question 中接受的答案基本上是我想做的,但那是使用 React JS,我想在没有任何框架的情况下做到这一点。我一直在尝试搜索多个参数和 onchange 事件,主要是获得 React 或不相关的响应。要么这是一个比我想象的更难的问题,要么我正在以完全错误的方式寻找答案。
【问题讨论】:
-
你没有覆盖任何东西,没有任何事件,因为你手动调用它
-
var atr = {"id":1,"param":"val1"}; document.getElementById("myelement").onchange = function() { console.log(atr); } -
如果这是您实际问题的真实表示,您根本不需要将对象传递到函数中,因为它们在同一范围内。
-
@Occam'sRazor - 这只是一个简化的说明,实际上它们在不同的范围内。但是很好。
标签: javascript