2

我显示用户评论。每个评论都是一个div,并且每个评论div都有<a>带有“”类的标签commentLikeLink。我将 jquery click 事件绑定到 ' commentLikeLink' 类,但如果我有 10 条评论并单击一个喜欢的按钮,我会触发 10 次事件。
我知道发生这种情况是因为我多次上同一堂课。但是如何阻止呢?
这是代码:

...
<div class="commentBox"">
...
@Html.ActionLink(likeText, "LikeComment", "Comment", null, new { id = Model.CommentId, @class = "commentLikeLink" })    
...

事件代码:

$(function () {
            $('.commentLikeLink').click(function (event) {
                var commentId = event.target.id;

                $.ajax({
                    url: this.href,
                    type: 'POST',                    
                    data: { commentId: commentId },
                    context: this,
                    success: function (result) {
                        if (result.msg == '1') {
                            $(this).text('Dislike');
                        }
                        else if(result.msg == '2') {
                            $(this).text('Like');
                        }

                    }
                });
                return false;
            });
        });
4

3 回答 3

6

您不应该获得 10 次点击。您可以将 click 事件绑定到类,但触发事件的上下文是单个元素,因此如果您有一些看起来像这样的标记:

<p>
    <a href="#" class="clickItem">Liked?</a>
    <br />
    <a href="#" class="clickItem">Liked?</a>
    <br />
    <a href="#" class="clickItem">Liked?</a>
    <br />
    <a href="#" class="clickItem">Liked?</a>
</p>

然后这将起作用,将链接文本设置为“喜欢!” 当每一个被点击时:

$(document).on("click", ".clickItem", function (ev) {
    $(this).text("Liked!");
});

你调试过代码吗?您确定一次获得 10 次点击吗?

于 2012-09-05T17:30:14.497 回答
4

是的,将点击事件绑定到类是一个更好的解决方案,但是如果您在它自己的项目或它自己的类上使用它,它实际上可以被多次触发!

所以不要这样做:$('.commentLikeLink').click(function (event) {//在这里做事}

你应该这样做,它只会触发一次:

$(document).on("click", ".commentLikeLink", function (ev) {
    //do things here
});
于 2013-12-04T15:24:00.763 回答
3

当我不小心在页面中多次包含相同的 .click 脚本函数时,我曾经发生过这种情况。确保您的 javascript 只包含一次

于 2012-09-05T17:28:42.480 回答