无法使用jquery选择div的子级

时间:2015-03-26 21:46:29

标签: php jquery

我正在制作某种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>

2 个答案:

答案 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
    });
  });
});