仍然在removeClass之后触发JQuery类选择器

时间:2009-12-29 18:12:38

标签: javascript jquery dom

我正在创建一个通过AJAX发送快速数据库时间戳的小投票机制。

“投票”类的一系列按钮是投票的触发器,而下面有文字显示该特定项目的“投票数”。

从click事件运行AJAX方法后,我删除了“vote”类,使得该项不能有多个。但是我的问题是,即使删除了类,触发器仍然可以触发并增加投票数。

以下是元素的HTML:

        <div class="points">
        <img class="vote" src="images/up.gif" alt="'.$idea['id'].'">
        <p class="vote-'.$idea['id'].'">'.$points.' Points</p>
    </div>

这是jQuery Call:

    $('.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');
    });

3 个答案:

答案 0 :(得分:9)

您将事件处理程序附加到DOM元素,并保持不变。你可以

一个。像这样设置.data('triggered', 1)

if ( !$(this).data('triggered') ) {
  // do code
  $(this).data('triggered', 1);
}

if ( $(this).hasClass('vote') ) {
   // do code
}

℃。使用.live而不是.click,例如$('.foo').live('click', fn)

d。在调用代码后手动删除事件处理程序,$(this).unbind('click')作为删除类位后的最后一行

答案 1 :(得分:6)

DOM元素的class用于引用它,而不是改变它的事件绑定行为。

要删除DOM元素,请点击事件使用unbind

答案 2 :(得分:1)

选择器仅在首次调用时进行一次评估。每次触发事件时都不会重新评估它以检查哪些元素匹配;那会很慢。