Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Bom dia, tenho essa função que envia votos, como na página me traz mais de um resultado... estou tentando usar o this no beforeSend e no success, para fazer as alterações somente naquele resultado.
HTML
<ul class="list-inline pull-right likes" style="margin: 0">
<li>
<a href="#" name="up" class="like" id="{id_top}">
<span class="glyphicon glyphicon-hand-up"></span> {up}
</a>
</li>
<li>
<a href="#" name="down" class="like" id="{id_top}">
<span class="glyphicon glyphicon-hand-down"></span> {down}
</a>
</li>
</ul>
JS
$('a.like').click(function(){
var name = $(this).attr('name');
var id_top = $(this).attr('id');
if(name == 'up'){
//Like up
$.ajax({
url: ''+baseurl+'topicos/up',
type: 'post',
data: { id_top: id_top },
beforeSend: function(){
$(this).find("[name=up]").html('<img src="'+baseurl+'assets/img/like.gif" align="absmiddle">');
},
success: function(){
$.ajax({
url: ''+baseurl+'services/top_page',
type: 'post',
data: { id_top: id_top },
success: function(data){
$(data).each(function(index){
$(this).find("[name=up]").html('<span class="glyphicon glyphicon-hand-up"></span> '+this.concordar+'');
})
}
})
}
})
} else ...
O voto até é enviado, mas na página não acontece nada... Se alguém conseguir ver se tem algo errada. Obrigado!Na verdade não entendi o porquê daquela variável que recebe o $(this)... mas de toda forma, continua a mesma coisa... não acontece nada, e no console tbm não apresenta nenhum erro.
<script type='text/javascript'>
var a = function(callback)
{
this.quemSouEu = "A";
callback();
}
var b = function()
{
this.quemSouEu = "B";
a(function(){
document.write("Oi, eu sou "+this.quemSouEu);
})
}
b();//chamando o B;
</script>
um exemplo genérico para entender o conceitopaulojuchem... Até entendi o seu exemplo e o conceito, mas não entendo como que na minha função não está dando certo.
paulojuchem... Até entendi o seu exemplo e o conceito, mas não entendo como que na minha função não está dando certo.
entao voce nao entendeu o conceito.
o this se refere a quem chamou a funcao e nao quem a criou ou aonde ela foi criada
no meu exemplo a funcao foi criada dentro do B, em seguida passamos a mesma para o A e dentro do A ela foi executada.
no caso do jquery, o beforeSend eh chamado pelo jquery, vc so passa a funcao para o jquery chamar, ou seja, o this 'vira' quem executou o beforeSend, assim como o success.
O this nunca vai ser quem define uma funcao, mas quem executa.
Se A definir uma funcao e B executa-la, todos os this dentro da funcao definida pelo A irao fazer referencia ao B, pois foi B quem executou a funcao.
Se A definir uma funcao e A chamar a funcao, dai entao o this dentro da funcao fara referencia ao A
(obs. nao sei pq os acentos n estao fucionando no meu teclaco)
da uma olhada nisso
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Closures
Para acabar com essa história do $(this)... já que tenho a id que peguei por um atributo, fiz assim: $('#''+id_top+').html...
Putz.. como ficou o seu código depois da minha sugestão ?
Sua sugestão não deu certo... era praticamente o que eu estava fazendo, só que não guardava o this numa variável. Então coloquei a id do voto numa classe, como id é única... tudo certo.
É por causa do escopo, salve o escopo que vc quer: