JavaScript中的奇怪行为

时间:2010-09-28 22:04:58

标签: javascript jquery

我有2个元素 - “span”(名为“divLikedX”)和“a”(名为“aLikeX”)。我有以下javascript(点击“a”):

    function CommentLike(CommentID, aLink) {
        if (CommentID != null && CommentID > 0)
            $.post("/Home/LikeComment", { CommentID: CommentID },
            function () {
                //alert($("#divLiked" + CommentID).is(':visible'));
                /*alert($(aLink).text());*/if ($("#divLiked" + CommentID).is(':hidden')) {
                    $("#divLiked" + CommentID).show();
                    $("#aLike" + CommentID).text('Unlike');
                } else {
                    $("#divLiked" + CommentID).hide();
                    $("#aLike" + CommentID).text('Like');
                }
            });
        };

如果删除$("#aLike" + CommentID).text('Unlike');$("#aLike" + CommentID).text('Like');字符串,我会得到正确的行为。但是使用这些字符串,它只能在前两次点击后正常工作alert($("#divLiked" + CommentID).is(':visible')) == "true"。为什么呢?

1 个答案:

答案 0 :(得分:1)

你似乎不是唯一一个有这个问题的人:cf http://forum.jquery.com/topic/hidden-visible-broken-in-ie8

当display:none元素附近有可见元素时,问题似乎附加在IE8中。这似乎愚弄了jquery算法,可以检测到:visible。

我可以建议您使用类而不是:visible和:hidden:

进行测试
if ($("#divLiked" + CommentID).hasClass('like')) {
      $("#divLiked" + CommentID).removeClass('like').show();
      $("#aLike" + CommentID).text('Unlike');
} else {
      $("#divLiked" + CommentID).addClass('like').show();
      $("#aLike" + CommentID).text('Like');
}

我希望这会对你有所帮助,

Jerome Wagner