2009-12-01 7 views
0

Exemple de balisage HTML ci-dessousjquery select problème parent

<div class="container answer_comments"> 
<p class="comment_text">Hey that's not cool.</p> 
<p class="comment_attribs">By Anonymous User on 01 Dec</p> 
<p class="comment_text">Is that really why?</p> 
<p class="comment_attribs">By person on 27 Nov</p> 
<p class="close_comments" onclick="close_comments()">Close</p> 
</div> 

fonction JS:

function close_comments() { 
var comments_wrapper = $(this).closest('.answer_comments'); 
comments_wrapper.slideUp(); 
} 

.answer_comments ne fermera pas. est-ce parce que j'utilise $ (ceci) mal? Ce div est répété plusieurs fois sur la page, quelle serait la meilleure façon d'atteindre ce que je suis en train de faire?

Répondre

3

vérifier ce que "cela" est, il est sans doute référence à la fonction elle-même, et non pas l'élément

changement

<p class="close_comments" onclick="close_comments()">Close</p> 

à

<p class="close_comments" onclick="close_comments(this)">Close</p> 

et la fonction à

function close_comments(element) { 
    var comments_wrapper = $(element).closest('.answer_comments'); 
    comments_wrapper.slideUp(); 
} 

et voir ce qui se passe

+0

qui fonctionne, Merci beaucoup. – stef

5

Vous avez raison de dire que vous utilisez this incorrect. Ce serait l'utilisation juste si vous liez l'événement avec jQuery:

$('.close_comments').click(function() { 
    var comments_wrapper = $(this).closest('.answer_comments'); 
    comments_wrapper.slideUp(); 
}); 

pour votre solution actuelle, vous auriez à faire

function close_comments(obj) { 
    var comments_wrapper = $(obj).closest('.answer_comments'); 
    comments_wrapper.slideUp(); 
} 

et

<p class="close_comments" onclick="close_comments(this);">Close</p> 
+0

+1 pour montrer le chemin * right * avec 'bind'ing. –