2012-02-06 142 views
1

我有一个显示朋友请求的PHP文件,可以说有4个请求。当用户点击接受或拒绝链接时,我想隐藏类为“request_buttons”的div,但问题在于它隐藏了其他3个div,我只想隐藏链接被按下的div。jquery onclick hide/show div

我的HTML代码是:

<div class="request_buttons"> 
    <a href="#" onclick="accept(<?php echo $cerere['id']; ?>)">accept</a> 
    <a href="#" onclick="refuse(<?php echo $cerere['id']; ?>)">refuse</a> 
</div> 
<span class="result"></span> 

和JavaScript是:

function accept(id) 
{ 
    $.ajax({ 
     type: "POST", 
     url: "request.php?action=accept", 
     data: "id="+id, 
     success: function(){ 
      $('.request_buttons').hide(); 
      $('.result').html('Request accepted'); 
     } 
    }); 
} 

LE:用我想出了一个sollution由Royi纳米尔提供的代码(错误)。 我修改了HTML这样:

<div id="2">  
    <div class="request_buttons"> 
    <a href="#" onclick="accept(2)">accept</a> 
    <a href="#" onclick="refuse(2)">refuse</a> 
    </div> 
    <div class="result"></div>    
</div> 

和jQuery的这个:

function accept(id) 
{ 
t = $('#'+id); 
    $.ajax({ 
     type: "POST", 
     url: "request.php?action=accept", 
     data: "id="+id, 
     success: function(){   
     $(t,'.result').first().html('Accepted'); 
     } 
    }); 
} 

而且它的工作原理,在div “request_buttons” dissapear,显示消息。我不知道如何,但它的工作原理!

回答

3
div class="request_buttons"> 
    <a href="#" onclick="accept(this);">accept</a> 
    <a href="#" onclick="refuse(this);">refuse</a> 
</div> 

function accept(obj) 
{ 
t = $(obj); 

    $.ajax({ 
     type: "POST", 
     url: "request.php?action=accept", 
     data: "id="+id, 
     success: function(){ 
      t.parent(".request_buttons").hide(); 
      $('.result').html('Request accepted'); 
     } 
    }); 
} 
+0

确实,你是对的。正如mugur所说,我必须给予div独特的ID并使用你的代码。它现在在工作,非常感谢你。 – 2012-02-06 12:14:34

+0

不要忘记'id'的参数:) – Stefan 2012-02-06 12:16:47

+0

你应该隐藏链接的父节点而不是链接:t.parent()。hide();通过该代码 – Yorgo 2012-02-06 12:24:13

2

在代码中,有

$.ajax({ 
    type: "POST", 
    url: "request.php?action=accept", 
    context: $('#'+id), 
    success: function(){ 
     $(this).parents('.request_buttons').hide(); 
     $('.result').html('Request accepted'); 
    } 
}); 
+0

在这种情况下,'this'不指向被点击的元素。 – Stefan 2012-02-06 12:13:57

+0

它的确如此。请参阅$ .ajax中的上下文参数(..) – techfoobar 2012-02-06 12:15:18

+0

啊,对不起!没有注意到上下文属性。当我评论它时,我认为你的帖子看起来不一样。 +1一个伟大的解决方案! – Stefan 2012-02-06 12:19:07

0

更换

$.ajax({ 
    type: "POST", 
    url: "request.php?action=accept", 
    data: "id="+id, 
    success: function(){ 
     $('.request_buttons').hide(); 
     $('.result').html('Request accepted'); 
    } 
}); 

您可以使用jQuery的父函数这一点。尝试$(this).parent().hide()