我似乎无法在以下场景中获得变量值:
function DoSomething(e) {
console.log(e.data); // the data I want - outputs fine
$(this).children('input').on('blur keyup', function(event) {
if(event.keyCode == '13') {
console.log(e.data); // the data is undefined for some reason?
}
}
}
e.data显示为未定义。如何将e.data传递给keyup事件?
答案 0 :(得分:2)
您应该将值保存在DoSomehting范围
中function DoSomething(e) {
console.log(e.data); // the data you want - outputs fine
var e = $.extend({}, e); // credits to @Malk
$(this).children('input').on('blur keyup', function(event) {
if(event.keyCode == '13') {
console.log($e.data);
}
}
}
答案 1 :(得分:1)
因为它们是嵌套的事件处理程序。 MouseEvent中的blur / keyup事件,如果你想在blur事件中使用e.data,你可能需要将它存储在一个变量中。
在这种情况下,会形成词法范围(闭包),因此keyup回调函数可以访问变量。
function DoSomething(e) {
console.log(e.data); // the data I want - outputs fine
var eventData = e.data; // store it in a variable so that it will be included in lexical scope
$(this).children('input').on('blur keyup', function(event) {
if(event.keyCode == '13') {
console.log(eventData);
}
}
}
答案 2 :(得分:0)
第一个' e'声明它的功能,但第二个不是,因为它是另一个功能。您可以将变量声明为全局变量(在函数之外,类似于' var x;')并使用它。
我的建议:
var x;
function DoSomething(e) {
x = e;
console.log(e.data);
$(this).children('input').on('blur keyup', function(event) {
if(event.keyCode == '13') {
console.log(x.data);
}
}
}