将变量传递给keyup事件的内部

时间:2015-03-18 18:10:46

标签: javascript jquery

我似乎无法在以下场景中获得变量值:

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事件?

3 个答案:

答案 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);
        }
    }
}