【问题标题】:Javascript make a function only work onceJavascript使一个函数只工作一次
【发布时间】:2012-08-24 01:09:50
【问题描述】:

我正在开发一个博客主题,您可以在其中喜欢主题页面中的帖子。它使用以下 javascript 通过 tumblr API 点赞帖子,将白心更改为红心,并将帖子注释计数 +1,显示在点赞按钮上方。它工作正常,但我有一个问题,当你点击心形按钮时,它会变成红色,喜欢帖子,并且 +1 到笔记计数,但是一旦它已经被喜欢,你可以继续点击按钮,它会不断添加一个到笔记计数。谁能帮我把它做成一个只能工作一次的功能,例如:有人点击心形按钮,它变成红色,在音符数上加一个,然后就完成了。

$(function() {    
        $('.likepost').live('click', function() {
            var post = $(this).closest('article');
            var id = post.attr('id');
            var oauth = post.attr('rel').slice(-8);
            var count = parseInt($("#note_count_"+ id).text());
            var like = 'http://www.tumblr.com/like/'+oauth+'?id='+id;
            $('#like-it').attr('src', like);
            $(this).css({"background" : "url(http://static.tumblr.com/uiqhh9x/JYdlzwvnx/like2.png)"});
            $("#note_count_"+ id).text(count+1);
            return false;
        });
    });

顺便说一句,它在http://blog.jamescharless.com/ 上运行。你必须登录到 tumblr 才能运行脚本。

【问题讨论】:

  • 我认为这里的问题不在于它可以多次使用,而在于它没有与 tumblr 帐户关联。否则,用户只需刷新页面并再次喜欢它。
  • @canon - 阅读api.jquery.com/one

标签: javascript jquery tumblr


【解决方案1】:
$("body").one("click", ".likepost", function() {
//your code here
});

通过使用.one() 函数,您只允许触发一次点击。这就是它的设计目的。理想情况下,您希望使用 .likepost 的父级而不是主体,但最坏的情况是您可以只使用主体作为父级。

【讨论】:

    【解决方案2】:

    您可以unbind点击事件。

    $(function() {    
            $('.likepost').live('click', function() {
                var post = $(this).closest('article');
                var id = post.attr('id');
                var oauth = post.attr('rel').slice(-8);
                var count = parseInt($("#note_count_"+ id).text());
                var like = 'http://www.tumblr.com/like/'+oauth+'?id='+id;
                $('#like-it').attr('src', like);
                $(this).css({"background" : "url(http://static.tumblr.com/uiqhh9x/JYdlzwvnx/like2.png)"});
                $("#note_count_"+ id).text(count+1);
    
                // unbind
                $(this).unbind('click');
    
                return false;
          });
    });
    

    【讨论】:

    • 我该怎么做?我一点也不擅长 javascript。
    • @Zhihao 您的理论部分正确,我认为实际上无法判断用户是否喜欢帖子。但它确实不止一次起作用..
    • 就这样。不要害怕阅读 jQuery 的文档。它充满了例子。
    • @JamesCharless 抱歉,我将评论移至该问题,因为它不是针对此答案的。我没有使用 tumblr 或 API 的经验,但他们是否没有提供一种方法来作为用户喜欢某物(并返回成功指示器),或者以其他方式检索喜欢的数量?也就是说,假设 tumblr 提供了类似的功能。需要明确的是,我指的是 AJAX 请求,而不是纯粹在客户端完成的操作。
    猜你喜欢
    • 2018-04-27
    • 1970-01-01
    • 1970-01-01
    • 2023-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-09
    • 2016-02-24
    相关资源
    最近更新 更多