1

我试图在这个实例中摆脱 ref 的那个讨厌的变量声明,我确信有一种方法可以摆脱每个范围以获得待命的“this”。我只是不知道该怎么做。

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

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

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

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

4

3 回答 3

3

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

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

但是,除了在代码运行时有更多时间做其他事情之外,这不会给您带来任何好处。;)

于 2012-08-23T19:36:13.763 回答
3

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

阅读此内容,您会有所了解:http ://www.robertsosinski.com/2009/04/28/binding-scope-in​​-javascript/

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

希望这个对你有帮助... :)

于 2012-08-23T19:36:18.990 回答
1

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

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

您不能在 javascript 中“离开”范围,您只能引用父范围中的声明。

于 2012-08-23T19:32:34.600 回答