为什么当我把这行放入时,我的jQuery出错?
<script type="text/javascript">
$(function(){
$(".arrowbutton").click(function(){
id = $(this).attr('rel');
$.ajax({
type:"POST",
url:"/upvote",
data:{'id':id},
beforeSend:function() {
},
success:function(html){
$(this).hide();
}
});
return false;
});
});
</script>
当我删除$(this).hide();
时,没关系。但是,我希望它隐藏!!!
答案 0 :(得分:3)
因为this
没有引用你的箭头按钮,但它引用了AJAX请求对象。
$(".arrowbutton").click(function(){
var that = this;
var id = $(this).attr('rel');
$.ajax({
type:"POST",
url:"/upvote",
data:{'id':id},
beforeSend:function() {
},
success:function(html){
$(that).hide();
}
});
return false;
});
jQuery或多或少地调用你的success
函数:
handleSuccess: function( s, xhr, status, data ) {
// If a local callback was specified, fire it and pass it the data
if ( s.success ) {
s.success.call( s.context, data, status, xhr );
}
// Fire the global callback
if ( s.global ) {
jQuery.triggerGlobal( s, "ajaxSuccess", [xhr, s] );
}
},
调用方法的第一个参数将成功函数中的this
关键字设置为s.context
答案 1 :(得分:1)
因为$(this)
没有返回您认为它在成功回调中的作用。你可以使用一个闭包:
$(function(){
$('.arrowbutton').click(function(){
var button = $(this);
$.ajax({
type: 'POST',
url: '/upvote',
data: { id: this.rel },
beforeSend:function() {
},
success:function(html) {
button.hide();
}
});
return false;
});
});
答案 2 :(得分:1)
$(this)
指的是Ajax请求,而不是周围的按钮。
尝试使用这样的闭包:
<script type="text/javascript">
$(function(){
$(".arrowbutton").click(function(){
var arrowbutton = $(this);
id = $(this).attr('rel');
$.ajax({
type:"POST",
url:"/upvote",
data:{'id':id},
beforeSend:function() {
},
success:function(html){
arrowbutton.hide();
}
});
return false;
});
});
</script>
答案 3 :(得分:1)
“this”在所有情况下都意味着这一点,因为你在一个新的函数里面是新的。
查看本教程,了解处理它的所有不同方法: