我试图在这个实例中摆脱那个令人讨厌的变量声明,我确信有一种方法可以摆脱每个范围来获得“这个”随叫随到。我根本不知道怎么做。
$(document).on('click', '.item', function(){
var ref = $(this).attr('data-id');
$.each(t, function(){
if(this.id == ref){
//action
return false;
}
});
}
这不是生死,我只是想清理代码。
答案 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中“留下”一个范围,你只能引用父范围中的声明。