我正在制作某种Like / Dislike系统,我使用jQuery来获取我想传递给html <a>
元素的变量。
当我使用alert()
时,它会提醒结果,但不希望将其打印到<a>
元素中,这意味着它不会选择它。
我希望这适用于每个元素(帖子)。同样重要的是LIKE适用于每个不同的帖子。
以下是代码:
$(document).ready(function(){
$('.foto').on("click", '.like',function(e){
e.preventDefault();
$(this).css("color","blue");
var pid = $(this).val();
var datastr = 'pid='+pid;
$.ajax({
type: "POST",
url: "like.php",
data: ({pid: pid}),
dataType: 'json',
success: function(result){
$(this).children("a:first").html(result['ajax']);
}
});
});
});
<div class=\"foto\">
<h2>{$pic['fieldtwo']}</h2>
<div class=\"slikata\">
<img src=\"{$pic['fieldone']}\" width=\"98%\" height=\"auto\">
</div>
<div class=\"dolu\">
<form method=\"post\" action=\"\">
<button type=\"button\" class=\"like\" type=\"submit\" value=\"{$pic['post_id']}\">
Like
</button>
<button type=\"button\" class=\"dislike\" type=\"submit\" value=\"{$pic['post_id']}\">
Dislike
</button>
<a>PRINT THE VARIABLE HERE</a>
<a>Comments({$ncom})</a>
<a>Posted by:{$pic['post_user']}</a>
</form>
</div>
</div>
答案 0 :(得分:1)
进入$.ajax()
后,$(this)
的范围会发生变化。因此,您需要保存实际需要的$(this)
以供日后使用:
$(document).ready(function(){
$('.foto').on("click", '.like',function(e){
e.preventDefault();
$(this).css("color","blue");
var pid = $(this).val();
var datastr = 'pid='+pid;
var eFoto = $(this); // store it here
$.ajax({
type: "POST",
url: "like.php",
data: ({pid: pid}),
dataType: 'json',
success:function(result){
eFoto.find("a:first").html(result['ajax']); // use it here
}
});
});
});
修改强>
您还希望使用.find()
代替.children()
,因为有问题的<a>
比.foto
低了一个级别。
谢谢@yoshi
答案 1 :(得分:0)
mopo922是正确的,当您将回调传递给$ .ajax时,您的上下文将丢失
您可以尝试绑定上下文,将代码修改为以下内容:
$(document).ready(function(){
$('.foto').on("click", '.like',function(e){
e.preventDefault();
$(this).css("color","blue");
var pid = $(this).val();
var datastr = 'pid='+pid;
$.ajax({
type: "POST",
url: "like.php",
data: ({pid: pid}),
dataType: 'json',
success: function(result){
$(this).children("a:first").html(result['ajax']);
}.bind(this) //bind the current context to the callback
});
});
});