"这个“;在每个范围之外(JQuery)

"This" outside of each scope (JQuery)

本文关键字:JQuery 范围 这个 quot      更新时间:2023-09-26

我正试图在这个实例中去掉ref的那个讨厌的变量声明,我相信有一种方法可以摆脱每个范围来获得on调用的"this"。我只是不知道怎么做。

$(document).on('click', '.item', function(){
    var ref = $(this).attr('data-id');
    $.each(t, function(){
        if(this.id == ref){
            //action
            return false;
        }
    });
}

这并不是真正的生死攸关,我只是想清理代码。

有一种方法可以做到这一点:使用自动传递给事件处理程序的event引用。

$(document).on('click', '.item', function(e) {
    $.each(t, function(){
        if (this.id == $(e.target).attr('data-id')) {
            //action
            return false;
        }
    });
}

但是,这并不能为您带来任何好处,除了在代码运行时有更多的时间做其他事情。)

实际上,您可以做一些事情。您可以将函数绑定到上下文。由于您已经在使用jQuery,因此可以使用jQuery.proxy,它接受参数函数和上下文,将该函数绑定到该上下文并返回一个新函数。

读一读,你会稍微理解它:http://www.robertsosinski.com/2009/04/28/binding-scope-in-javascript/

然后看看这个:http://api.jquery.com/jQuery.proxy/

希望这能有所帮助…:)

不确定你的意图是什么,但如果只是引用这个原始元素:

$(document).on('click', '.item', function(){
    var that = this;
    $.each(function(){
       // use 'that' however you'd like
       if ($(that).data().id == 'whatever') ...
     }
});

您不能在javascript中"离开"作用域,只能引用父作用域中的声明。