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コードはdodumentreadyで実行されます

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パラメーターがnullでないことを確認し$(voteContainer)、jQueryオブジェクトでない場合はjQueryオブジェクトがこれを使用することです。

2 つ目は HTML レイアウトです。children 関数は、要素の直接の子に対してのみ機能します。jQuery ドキュメントで確認してください。以下からわかるように、使用し.find()て問題を解決できます。

.children() メソッドは .find() とは異なり、.children() は DOM ツリーを 1 レベル下に移動するだけですが、.find() は複数のレベルを下に移動して子孫要素 (孫など) も選択できます。

于 2012-12-29T22:47:05.963 に答える
0

あなたのJavaScriptでは、ボタンを選択しています

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

正確な属性を持つマークアップに div がないため、空の jQuery オブジェクトが返されますpid='btUp'pid^='btUp'代わりに、または直接使用する必要がありますpid='btUpVote'この例またはW3C 仕様を参照してください。

于 2012-12-29T23:03:36.450 に答える
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 に答える