Я создал представление, которое создает сообщения, и каждый пост имеет comment_set, который производит все комментарии, сделанные пользователем. Когда публикуется новый комментарий, функция ниже.jquery .click() событие выпуск (django)
$("#comment-post-button").click(function(){
var event_id = document.getElementById('event-id').value;
var url= '/post-comments/'+event_id +'/';
var data = {csrfmiddlewaretoken: document.getElementsByName('csrfmiddlewaretoken')[0].value,
content:document.getElementsByName('comment-post-content')[0].value
}
$.post(url , data, function(){
$("#refresh-comments").load("/comments/" + event_id + '/', function(){
$("#comment-post-content").val("");
});
});
$("#comment-post-content").val("");
return false;
});
Проблема заключается в том, что страница содержит несколько сообщений и каждую кнопку комментарий представления имеет тот же идентификатор «комментарий-пост-кнопка». Таким образом, вышеуказанная функция работает только для верхней позиции, а не для остальных. Я вижу, в чем проблема, но не знаю, как это решить. Пожалуйста помоги.
Вот HTML разметка:
{% for event in events %}
<div class="post">
<div class="post-right">
<div class="post-author"><a href="/{{ event.author.username }}/">{{ event.author.first_name }}</a></div>
<div class="post-content">{{ event.description }}</div>
<div class="post-bar">
<div class="post-likes">{{ event.up_votes }}<a href="#"><img src="/site-media/static/images/like.png" /></a></div>
<div class="post-dislikes">{{ event.down_votes }}<a href="#"><img src="/site-media/static/images/dislike.png" /></a></div>
<div class="post-timestamp">{{ event.pub_date }}</div>
<a href="#" class="post-comment-link">Comment</a>
</div>
<div class="post-comment">
<form method="post" action="/post-comments/{{ event.id }}/">
{% csrf_token %}
<input type="text" id="comment-post-content" name="comment-post-content" maxlength="200" placeholder="Add a comment..." />
<input type="hidden" id="event-id" value="{{ event.id }}">
<input type="submit" id="comment-post-button" class="comment-post-button" value="Post comment" />
</form>
</div>
<div id="refresh-comments" class="comments">
{% include "comments.html" %}
</div>
</div>
<div class="post-left">
<a href="#"><img src="../FestJanta/site-media/static/images/post.jpg" /></a>
</div>
</div>
{% endfor %}
comments.html:
{% for comment in event.comment_set.all|slice:"3" %}
<div class="comments-right">
<a href="/{{ name }}/" class="first_name">{{ comment.author.first_name }}</a>
{{ comment.content }}<br>
<div class="comment-timestamp">{{ comment.pub_date }}</div>
</div>
<div class="comments-left"><a href="#"><img src="../FestJanta/site-media/static/images/comment.jpg" /></a></div>
{% endfor %}
Окончательный рабочий раствор:
$(".comment-post-button").click(function(){
var btn = $(this);
var currentPost = btn.parents('.post');
var event_id = currentPost.find('.event-id').val();
var url= '/post-comments/'+event_id +'/';
var data = {csrfmiddlewaretoken: document.getElementsByName('csrfmiddlewaretoken')[0].value,
content:currentPost.find('input[name="comment-post-content"]').val()
}
$.post(url , data, function(){
$(currentPost.find('.refresh-comments')).load("/comments/" + event_id + '/', function(){
$(currentPost.find('.comment-post-content')).val("");
});
});
return false;
});
Вы можете предоставить тот же класс ко всей кнопке «Почта», а затем получить к ним доступ по классу –
или перечислить id – karaxuna
@AjinderSingh Но как это решит проблему. Мне нужно однозначно идентифицировать кнопку сообщения – toothie