Я создаю немного голосующего механизма, который отправляет быструю метку времени базы данных через Ajax.
Серия кнопок с классом "голосование" является триггерами для голосования, в то время как существует текст ниже для показа, сколько "голосов" для того конкретного объекта.
После того, как я выполняю метод Ajax от события щелчка, я удаляю класс "голосования", таким образом, что не может быть больше чем одного от того объекта. Однако моя проблема состоит в том, который даже с классом удалил триггер, может все еще запустить и увеличить как много голосов.
Вот HTML элемента:
<div class="points">
<img class="vote" src="images/up.gif" alt="'.$idea['id'].'">
<p class="vote-'.$idea['id'].'">'.$points.' Points</p>
</div>
Вот Вызов jQuery:
$('.vote').click(function(){
var iID = $(this).attr('alt');
var typeString = "id="+iID;
$.ajax({
type: "POST",
url:"vote.php",
data: typeString,
success: function (txt){
$('.vote-'+iID).html('<p>'+txt+' Points</p>');
}
});
$(this).attr('src', 'images/voted.gif');
$(this).removeClass('vote');
});
Класс -
элемента DOM используется для ссылки на него, а не для изменения его поведения привязки к событиям.
Для удаления элементов DOM используйте unbind.
.Вы прикрепляете обработчик событий к DOM-элементу, и он остается нетронутым. Вы можете либо
a. установить .data('triggergered', 1)
так:
if ( !$(this).data('triggered') ) {
// do code
$(this).data('triggered', 1);
}
b.
if ( $(this).hasClass('vote') ) {
// do code
}
c. использовать .live вместо .click, например $('.foo').live('click', fn)
d. удалить обработчик события вручную после вызова вашего кода, $(this).unbind('click')
в качестве последней строки, после бита удаления класса
Селектор вычисляется только один раз, при первом вызове. Он не подвергается повторной оценке каждый раз, когда происходит событие, чтобы проверить, какие элементы совпадают; это было бы медленно.