Селектор Класса jQuery, все еще стреляя после removeClass

Я создаю немного голосующего механизма, который отправляет быструю метку времени базы данных через 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');
    });
5
задан JMichaliga 29 December 2009 в 18:12
поделиться

3 ответа

Класс - элемента DOM используется для ссылки на него, а не для изменения его поведения привязки к событиям.

Для удаления элементов DOM используйте unbind.

.
6
ответ дан 18 December 2019 в 10:45
поделиться

Вы прикрепляете обработчик событий к 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') в качестве последней строки, после бита удаления класса

.
9
ответ дан 18 December 2019 в 10:45
поделиться

Селектор вычисляется только один раз, при первом вызове. Он не подвергается повторной оценке каждый раз, когда происходит событие, чтобы проверить, какие элементы совпадают; это было бы медленно.

1
ответ дан 18 December 2019 в 10:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: