0

複数のチェックボックスがあるウェブページがあります(以下のいずれかのコード):

<div>
        <label for="ViewAsWebpage">
            {{#if this.ViewAsWebpage}}
                <input type="hidden" id="ViewAsWebpage" name="ViewAsWebpage" value="true"/> 
                <input id="chkViewAsWebpage" type="checkbox" class="enable-checkbox" checked /> 
            {{else}}
                <input type="hidden" id="ViewAsWebpage" name="ViewAsWebpage" value="false"/> 
                <input id="chkViewAsWebpage" type="checkbox" class="enable-checkbox" /> 
            {{/if}}
            <span>View as Webpage</span>
        </label>
    </div>

変更イベントを処理するイベントハンドラーがあります(すべてのチェックボックスに対して):

changeCheckboxValue: function(e) {
            var target = this.$(e.target);
            var id = this.$(e.target).siblings().attr('id');

            $(id).val(target.is(':checked') ? 'true' : 'false');

上記のイベントはうまく機能し、true/falseの値を設定します。

ただし、フォームをシリアル化すると(送信時にフォーム値をPOSTするため)、これらの更新された値は反映されません。誰かplsは私が欠けているものを私に知らせることができますか?

4

3 に答える 3

1

prop()を使用して、チェックされたプロパティを設定します。

$(id).prop("checked", true);

また

$(id).prop("checked", false);
于 2012-09-28T20:16:53.157 に答える
1

id問題は、すべてのhiddenフィールドで同じものを使用しているためだと思います。

このコードを確認しましょう:

changeCheckboxValue: function(e) {
    var target = this.$(e.target);    // get the checkbox that is clicked
    var id = this.$(e.target).siblings().attr('id');  // get checkbox's siblings' id
                                             // so id == 'ViewAsWebpage'
    $(id).val(target.is(':checked') ? 'true' : 'false');  // HERE!!
              // $(id) returns all the hiddens that have id == 'ViewAsWebpage'

したがって、すべての非表示の値は、数回にわたって完全に変化します。最終的にはすべて「true」または「false」になります。

このように隠しフィールドを選択するべきだと思います。

changeCheckboxValue: function(e) {
    var target = $(e.target);
    var hidden = target.prev();

    hidden.val(target.is(':checked') ? 'true' : 'false');
于 2012-09-28T20:19:35.033 に答える
1

問題は#がないことでした。

変更により修正:

$(id).val(target.is(':checked') ? 'true' : 'false');

$('#' + id).val(target.is(':checked') ? 'true' : 'false');
于 2012-09-28T21:48:40.027 に答える