我无法弄清楚为什么这个脚本无法工作,除非我创建对$(this)的引用并将其分配给另一个变量,如$ _this = $(this);这是我得到的唯一解决方案,但是想知道是否有更好的解决方案 - 少一个新手。观察我希望能够在回调函数中的get响应之后在$ _this.prepend(“Choose”+ res)部分中使用它:
$('#loadScript').one('click',function(e){
$loading = $('<span> Loading Files... </span>');
$(this).after($loading);
$_this = $(this);
$.get('eval.php',{loadScriptGetOptions:1}, function(res){
setTimeout(function(){
$loading.remove();
$_this.prepend("<option>Choose</option>"+res);
},1200)
})
})
提前感谢。
答案 0 :(得分:4)
您忘记在两个地方使用var
:
$loading = ...
和
$_this = ...
我喜欢self
与那里丑陋的下划线。
$('#loadScript').one('click',function(e){
var $loading = $('<span> Loading Files... </span>');
$(this).after($loading);
var $self = $(this);
$.get('eval.php',{loadScriptGetOptions:1}, function(res){
setTimeout(function(){
$loading.remove();
$self.prepend("<option>Choose</option>"+res);
}, 1200);
});
});
答案 1 :(得分:1)
你的$ _this.prepend是在setTimeout函数中调用的,这与外部函数不同。你可以做类似的事情:
function myFunc() {
// What is $(this) here?
}
$('#loadScript').one('click',function(e){
$loading = $('<span> Loading Files... </span>');
$(this).after($loading);
$_this = $(this);
$.get('eval.php',{loadScriptGetOptions:1}, function(res){
setTimeout(myFunc, 1200);
})
})
否则,我认为您的解决方案似乎没问题。
请注意,$_this
是您在setTimeout
中使用的函数使用的闭包变量,因此如果您需要引用已知元素,则可以 摆脱其他评论(即使用$('#loadScript')
直接访问元素)。