Проблема в том, что когда вызывается функция success
, вы вызываете bindPostCommentHandler
(снова), который связывает анонимную функцию снова со всеми объектами формы. То есть после одной отправки каждая форма имеет две функции, связанные с событием отправки, после двух передач - три и т. д.
Таким образом, вы должны изменить часть success
функции Ajax, чтобы добавить только обработчик в форму, содержащуюся в ответе.
Может быть, так (я не знаю, работает ли это, я не так хорош в Javascript / jQuery):
Изменить:
Вы упомянули, что первый работает. Тогда код, вероятно, не работает, потому что DOM заменяется. Смотрите мой обновленный код (используйте html
вместо replace
).
Редактировать 2:
Как насчет изменения структуры HTML. Просто оберните другой div
вокруг комментариев и формы и замените его содержимое. Это должно определенно работать. Что-то вроде
<div class="new_around_comments">
<div class="comments"></div>
<div class="commentFormWrapper">
<!-- Form -->
</div>
</div>
Тогда вам нужно два раза позвонить parent()
:
function bindPostCommentHandler(parent)
{
parent.find('form').submit(function() {
var current = $(this);
$.ajax({
//...
success: function(html, textStatus) {
// Edit 2
parent = current.parent().parent()
parent.html(html);
bindPostCommentHandler(parent);
},
//...
});
return false;
});
}
$(document).ready(function() {
var parent = $('.commentFormWrapper')
bindPostCommentHandler(parent);
});