为什么这个类没有用attr设置?

时间:2012-12-29 22:30:15

标签: jquery html css

我有以下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>

5 个答案:

答案 0 :(得分:1)

您可以使用addClass

_voteButtonUp.addClass("upVote_inactive");

答案 1 :(得分:1)

要回答这个问题真的很难,因为我们没有HTML或你如何调用InitVoteContainer。但我可以向你保证.attr函数对'class'和值有效。

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

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

  

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

答案 2 :(得分:0)

这应该有效。 也许没有定义_voteButtonUp。检查你的选择器。 但是,无论如何,请使用addClass来执行此操作。

答案 3 :(得分:0)

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

_voteButtonUp.addClass("upVote_inactive");

另外,如果你聪明地使用CSS选择器,那么你可以在JS代码中执行 .addClass('inactive'); ...

#buttonUp .inactive
{
   /* style here */
}

答案 4 :(得分:0)

在JavaScript中,您选择了

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

将返回一个emtpy jQuery对象,因为您的标记中没有具有确切属性pid='btUp'的div。您应该使用pid^='btUp'代替 - 或直接pid='btUpVote'。 请参阅this exampleW3C specification