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

时间:2012-08-23 19:23:26

标签: javascript jquery

我试图在这个实例中摆脱那个令人讨厌的变量声明,我确信有一种方法可以摆脱每个范围来获得“这个”随叫随到。我根本不知道怎么做。

$(document).on('click', '.item', function(){

    var ref = $(this).attr('data-id');

    $.each(t, function(){
        if(this.id == ref){
            //action
            return false;
        }
    });
}

这不是生死,我只是想清理代码。

3 个答案:

答案 0 :(得分:3)

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

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

但是,除了代码运行时有更多时间做其他事情之外,这并不能为你买任何东西。 ;)

答案 1 :(得分:3)

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

阅读本文,以便您理解它:http://www.robertsosinski.com/2009/04/28/binding-scope-in-javascript/

然后看一下:http://api.jquery.com/jQuery.proxy/

希望这有点帮助......:)

答案 2 :(得分:1)

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

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

你不能在javascript中“留下”一个范围,你只能引用父范围中的声明。