0

我有以下 jquery 代码:

function InitVoteContainer(voteContainer) {

    var _userVote = voteContainer.children(".storeUserVote").val();
    var _userObjectId = voteContainer.children(".storeObjectId").val();
    var _userVoteKey = voteContainer.children(".storeVoteKey").val();
    var _UserAuth = voteContainer.children(".storeUserAuth").val();

    var _voteButtonUp = voteContainer.children("div[pid='btUp']");
    var _voteButtonDown = voteContainer.children("div[pid='btDown']");

    var upBtValue = 0;
    var downBtValue = 0;


        _voteButtonUp.attr("class", "upVote_inactive");
        _voteButtonDown.attr("class", "downVote_inactive");

        _voteButtonUp.prop("onclick", null);
        _voteButtonDown.prop("onclick", null);

}

该代码将在 upVote 和 downVote 按钮上切换类。代码运行良好,但从未设置类?问题是为什么?

编辑1:

更新一些代码:

此 jquery 代码在文档准备就绪时运行

function InitVoteControls() {

$("#mainPostList").find(".voteCon").each(function () {
    InitVoteContainer($(this));
});
}

这是 jquery 使用的 HTML:

<ul id="mainPostList" class="verticalList">
        @foreach (var postViewModel in Model.Posts)
        {
            <li>

<div class="postContainer">

<div class="voteCon">
        <input class="storeUserVote" type="hidden" value="@Model.UserVote" />
        <input class="storeObjectId" type="hidden" value="@Model.ObjectId" />
        <input class="storeVoteKey" type="hidden" value="@Model.VoteKey" />
        <input class="storeUserAuth" type="hidden" value="@Request.IsAuthenticated" />

        @if (!Request.IsAuthenticated)
        {
            <div pid="btUpVote" class="upVote"></div>
        }
        else
        {
            <div pid="btUpVote" class="upVote_inactive"></div>
        }

        <br style="clear:both;" />
        <div class="voteCountBox">
            @Html.Encode(Model.VoteBalance)
        </div>
        <br style="clear:both;" />

        @if (!Request.IsAuthenticated)
        {
            <div pid="btDownVote" class="downVote"></div>
        }
        else
        {
            <div pid="btDownVote" class="downVote_inactive"></div>
        }
</div>
</div>
</li>
        }
    </ul>
4

5 回答 5

1

您可以使用addClass

_voteButtonUp.addClass("upVote_inactive");
于 2012-12-29T22:32:43.463 回答
1

真的很难回答这个问题,因为我们没有 HTML 或您如何调用InitVoteContainer. 但我可以向您保证,该.attr功能对于“类”和价值来说效果很好。

我的第一个猜测是,voteContainer参数确保它不为空,并且它是 jQuery 对象,$(voteContainer)如果它不是 jQuery 对象,则使用它。

第二个是 HTML 布局,children 函数仅适用于元素的直接子元素,请查看 jQuery 文档。正如您从下面看到的那样,使用.find()可以解决您的问题。

.children() 方法与 .find() 的不同之处在于 .children() 仅沿 DOM 树向下移动一个级别,而 .find() 也可以向下遍历多个级别以选择后代元素(孙子等)。

于 2012-12-29T22:47:05.963 回答
0

这应该有效。也许_voteButtonUp没有定义。检查您的选择器。但是,无论如何,使用它addClass来做到这一点。

于 2012-12-29T22:37:49.583 回答
0

您需要使用 jQuery 中的addClass()方法来实现您想要的结果。

_voteButtonUp.addClass("upVote_inactive");

此外,如果您巧妙地使用 CSS 选择器,那么您可以执行.addClass('inactive'); 在 JS 代码中...

#buttonUp .inactive
{
   /* style here */
}
于 2012-12-29T22:40:08.597 回答
0

在您的 JavaScript 中,您正在选择您的按钮

voteContainer.children("div[pid='btUp']");

这将返回一个空的 jQuery 对象,因为您的标记中没有具有确切属性的 div pid='btUp'。您应该使用pid^='btUp'- 或直接使用pid='btUpVote'。请参阅此示例W3C 规范

于 2012-12-29T23:03:36.450 回答