我有以下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>
答案 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 example或W3C specification。