如何在第一次单击时使点击功能起作用

时间:2013-09-03 21:43:17

标签: jquery

我有这个脚本。如果主题已被喜欢,它的效果很好,但如果它从未被标记为已被喜欢,则需要双击它才能显示用户喜欢的内容。我如何让它第一次工作。它是旧谈话的延续,我从这里得到了一些很大的帮助old conversation

$(document).ready(function(){
    $("#like<? echo $msgID;?>").click(function(){                                      
        var isLike = $(this).text() === "Like",
        url = isLike ? "status-updates/like.php?status_id=<? echo $msgID;?>&user=<? echo $session->username;?>" : "status-updates/unlike.php?status_id=<? echo $msgID;?>&user=<? echo $session->username;?>";
    $.post(url + "?status_id=<? echo $msgID;?>&user=<? echo $session->username;?>", $(this).serialize());
    setTimeout(function () {
        $("#likeDiv<? echo $msgID;?>").load('status-updates/like-count.php?status_id=<? echo $msgID;?>');
        $(".whoLikes<? echo $msgID;?>").load('status-updates/who-likes.php?status_id=<? echo $msgID;?>');
        $("#like<? echo $msgID;?>").text(isLike ? "Unlike" : "Like");
    }, 500);                                   
});     
});

1 个答案:

答案 0 :(得分:1)

我怀疑你的问题可能归结为以下几点:

var isLike = $(this).text() === "Like";
url = isLike ? "status-updates/like.php?status_id=<? echo $msgID;?>&user=<? echo $session->username;?>" : "status-updates/unlike.php?status_id=<? echo $msgID;?>&user=<? echo $session->username;?>";

或者,以非常长的滚动方式,

var isLike = $(this).text() === "Like";
url = isLike ? <like URL> : <unlike URL>;

换句话说,当文本已经显示“赞”时,POST编辑的网址实际上是“喜欢”的网址。

顺便提一下,有一种更简洁的方法来执行您使用setTimeout调用的延迟,这似乎是等待半秒 - 足够,您希望post能够完成 - 跑步前。相反,您可以使用$.post的第三个参数

在POST完成后运行代码
$.post( <url>, <data>, 
        function () {
          $("#likeDiv<? echo $msgID;?>").load('status-updates/like-count.php?status_id=<? echo $msgID;?>');
          $(".whoLikes<? echo $msgID;?>").load('status-updates/who-likes.php?status_id=<? echo $msgID;?>');
          $("#like<? echo $msgID;?>").text(isLike ? "Unlike" : "Like");
        }
);