JS - 通过事件处理程序传递参数
JS - Passing arguments through an eventHandler
我有一个函数可以打开名为 "openPopup()" 的弹出窗口-window。弹出窗口有两个静态按钮:取消和提交。 openPopup() 函数的第一个参数是弹出窗口的内容。第二个参数是一个回调函数,它将绑定到提交按钮上的点击事件。问题:如果回调函数有一些参数,它们不会传递给 eventHandler。在示例中,它是参数 "formData":
function showPopup(content, callback) {
// put content inside the popup
// add a class the the popup so that it's visible
document.getElementById("submit-btn").addEventListener( 'click', callback);
}
这是在用户点击某些内容后运行的脚本:
formData = new FormData();
formData.append("before","popup"); // just as an example
showPopup("Hey, click me and I submit formData!>", function(formData) {
formData.append("value","test");
//submitting formData with Ajax...
});
"formData" 不是未定义的,它不是通过事件处理程序传递过来的。相反,格式现在是 mouseEvent。 如何更改代码以便我可以在回调函数中访问 "formData"?
您不能覆盖获取 MouseEvent 作为第一个变量,但您可以这样做:
showPopup("Hey, click me and I submit formData!>", function( mouseEvent ) {
// Your formData can be accessed from here by *this*
this.append("value","test");
//submitting formData with Ajax...
}.bind( formData ));
参数传递行为写成addEventListener
,如果不修改addEventListener
的代码,则无法更改。
但是请注意,闭包是在函数定义时创建的。通过写作
formData = new FormData();
formData.append("before","popup"); // just as an example
showPopup("Hey, click me and I submit formData!>", function() { // no parameters
// formData is accessible here
});
您在 formData
存在时定义回调函数,因此 formData
将包含在闭包中。这意味着当实际调用回调函数时,您可以访问确切的 formData
。
我有一个函数可以打开名为 "openPopup()" 的弹出窗口-window。弹出窗口有两个静态按钮:取消和提交。 openPopup() 函数的第一个参数是弹出窗口的内容。第二个参数是一个回调函数,它将绑定到提交按钮上的点击事件。问题:如果回调函数有一些参数,它们不会传递给 eventHandler。在示例中,它是参数 "formData":
function showPopup(content, callback) {
// put content inside the popup
// add a class the the popup so that it's visible
document.getElementById("submit-btn").addEventListener( 'click', callback);
}
这是在用户点击某些内容后运行的脚本:
formData = new FormData();
formData.append("before","popup"); // just as an example
showPopup("Hey, click me and I submit formData!>", function(formData) {
formData.append("value","test");
//submitting formData with Ajax...
});
"formData" 不是未定义的,它不是通过事件处理程序传递过来的。相反,格式现在是 mouseEvent。 如何更改代码以便我可以在回调函数中访问 "formData"?
您不能覆盖获取 MouseEvent 作为第一个变量,但您可以这样做:
showPopup("Hey, click me and I submit formData!>", function( mouseEvent ) {
// Your formData can be accessed from here by *this*
this.append("value","test");
//submitting formData with Ajax...
}.bind( formData ));
参数传递行为写成addEventListener
,如果不修改addEventListener
的代码,则无法更改。
但是请注意,闭包是在函数定义时创建的。通过写作
formData = new FormData();
formData.append("before","popup"); // just as an example
showPopup("Hey, click me and I submit formData!>", function() { // no parameters
// formData is accessible here
});
您在 formData
存在时定义回调函数,因此 formData
将包含在闭包中。这意味着当实际调用回调函数时,您可以访问确切的 formData
。