如何停止重复单击以在jquery中发布ajax

时间:2014-02-27 19:04:52

标签: javascript jquery ajax

我使用django创建一个网站。我只是写一个投票页面,当人们点击时,它会通过jquery ajax发布数据。 这是代码

<!doctype html>
<html>
 <head>
  <script src="jquery-1.10.2.min.js"></script> 
  <meta charset="utf-8">
  <title>vote</title>
 </head>
<body>
 <script language="javascript" type="text/javascript">
 $(function(){
    $(".post_up").click(function(){
        $.ajax({
            url:"/article/{{post.id}}/vote_up/",
            type:'post',              
            success:function(msg){
                var beforevote = $(".btn").text();                 
                if (msg==0){
                    $(".pop_up_vote").empty().text("thanks,i get your vote!").show(300).delay(7000).hide(300);
                      };
                      if (msg==1){
                    $(".pop_up_vote").empty().text("you already voted,do not need vote again").show(300).delay(7000).hide(300);
                };
         })

 })
 </script>

 <a href="javascript:" class="btn_gray_light post_up"><span><i class="icon_add"></i>vote</span></a> 
 <div class ="pop_up_vote" >
 </div>


</body>
</html>

一切运作良好,我刚刚发现了问题。我不能停止反复点击投票。 如果我反复点击  <a href="javascript:" class="btn_gray_light post_up"><span><i class="icon_add"></i>vote</span></a>

它重复显示pop_up消息,“我已投票,不再投票。” 所以我想,我可以通过删除类post_up来解决问题,这样,人们就无法激活ajax post功能 所以我添加 $(this).removeClass();

  $(function(){

    $(".post_up").click(function(){
        $(this).removeClass();
        $.ajax({
            url:"/article/{{post.id}}/vote_up/",
            type:'post',              
            success:function(msg){
                var beforevote = $(".btn").text();                 
                if (msg==0){
                    $(".pop_up_vote").empty().text("thanks,i get your vote!").show(300).delay(7000).hide(300);
                      };
                      if (msg==1){
                    $(".pop_up_vote").empty().text("you already voted,do not need vote again").show(300).delay(7000).hide(300);
                };
        })

})

当我删除课程时,我仍然遇到有关ajax的问题​​。我怎么能解决它?

2 个答案:

答案 0 :(得分:2)

试试这个:http://api.jquery.com/one/

$('.post_up').one('click', function () {

完成Ajax后,您可以重新绑定相同的处理程序:

$('.post_up').one('click', function handler() {
    var el = this;
    $.ajax({
        url: '/article/{{post.id}}/vote_up/',
        type: 'post',  
        success: function (msg) {
            $(el).one('click', handler);

以下是演示:http://jsfiddle.net/wared/CVm37/

答案 1 :(得分:1)

我认为问题是已经为链接设置了行为,因此删除该类将不会执行任何操作

试试这个

$(".post_up").unbind("click");