我在jQuery中有这个代码:
$("a.crt_albmed").click(function(){
page = $(this).attr('alt');
loader = "<img src='/images/al_loading.gif' width='20' height='20' />";
$.ajax({
type: "GET",
url: "/for_photos/"+page,
beforeSend: function(){
$(this).append(loader);
},
success: function(grabbed){
//$("#load_div").html(grabbed);
}
});
});
在给定div
中加载页面。现在我的问题是这个。我希望在加载之前将字符串loader
附加到链接的.html()
,但问题是它不起作用。现在我尝试更改html内容,如$(this).html("good");
,但它仍然没有改变。我认为此$("#myDiv").html("good");
与$(this).html("good");
相同,但我不知道它为什么不起作用。我还是jQuery的新手。请有人知道如何使这项工作?
答案 0 :(得分:2)
您可能需要设置this
的上下文 - 尝试替换
beforeSend: function(){
$(this).append(loader);
},
与
// define element before ajax call
var $el = $(this);
// ...
// ajax call, then:
beforeSend: function(){
$el.append(loader);
},
//...
试一试,看看它是如何运作的。
答案 1 :(得分:0)
&#34;良好&#34;是无效的HTML,要么使用有效的html,要么使用.text()函数,即
使用:
$("#myDiv").text("good");
或
$("#myDiv").html("<span>good</span>");
答案 2 :(得分:0)
您在this
不再是您希望的按钮的地方使用this
。好的做法是将按钮保存在变量(var self = this
)中,或者只需再次选择按钮($("a.crt_albmed").append(loader);
)来分配html。
试试这个:
$("a.crt_albmed").click(function(){
var self = this // This will store the button
page = $(this).attr('alt');
loader = "<img src='/images/al_loading.gif' width='20' height='20' />";
$.ajax({
type: "GET",
url: "/for_photos/"+page,
beforeSend: function(){
$(self).append(loader);
},
success: function(grabbed){
//$("#load_div").html(grabbed);
}
});
});
答案 3 :(得分:0)
beforeSend: function(){
$(this).append(loader);
}
&#39;这&#39;在beforesend函数内部指向传递给$ .ajax的对象,如果要访问beforesend函数中当前单击的对象,请执行以下操作。
$("a.crt_albmed").click(function(){
var clickedEle = this;
page = $(this).attr('alt');
loader = "<img src='/images/al_loading.gif' width='20' height='20' />";
$.ajax({
type: "GET",
url: "/for_photos/"+page,
beforeSend: function(){
$(clickedEle).append(loader);
},
success: function(grabbed){
//$("#load_div").html(grabbed);
}
});
});
保存引用并在beforesend中使用它,因为调用beforesend的对象是传递给$ .ajax的对象而不是被点击的元素