2

チェックされたすべてのアイテムをテキスト領域に配置する関数を作成しました..しかし、私の問題は、チェックされたアイテムの表示にインデックスが付けられていることです。

例えば:

[x] チェックボックス 1 (2 番目のチェック)
[x] チェックボックス 2 (最初のチェック)
[x] チェックボックス 3 (3 番目のチェック)

今、ディスプレイはこのようになります

チェックボックス1 - >チェックボックス2 - >チェックボックス3

それはチェックボックス2 - >チェックボックス1 - >チェックボックス3でなければなりません

ここに関数があります:

function checkTick()
{

    $('input[type=checkbox]').change(function () {
            var selectedvalue=[];
            $(":checkbox:checked").each(function(){

                selectedvalue.push($(this).attr("value"));

            });
            document.getElementById('txtSignOff').value = selectedvalue.join("->");

        });

}
4

2 に答える 2

3

グローバル スコープ: グローバル スコープで変数selectedvalueを設定します。各チェックボックスの値をプッシュするのではなく、現在のチェックボックスの値のみをプッシュします。

チェックを外すと値をポップ: チェックボックスがチェックされていない/チェックされていない場合、配列内のすべての値が異なる場合、対応する値が配列からポップされます。

var selectedvalue=[];    

    $('input[type=checkbox]').change(function () {
                //If checked then push the value
                if($(this).is(":checked")){
                    selectedvalue.push($(this).attr("value"));
                }else{
                   //This is what pops the value from the array when the checkbox is unchecked.
                    selectedvalue.splice(selectedvalue.indexOf($(this).attr("value")),1); 
                }
                document.getElementById('txtSignOff').value = selectedvalue.join("->");    
    });

関数のブロック化: 関数にブロック化する必要はありませんcheckTick。jQuery ユーティリティは、イベントが発生したときにそのようなことを提供します。

于 2013-11-05T07:05:23.507 に答える
0

あなたは正しいことをしていますが、変数がオーバーライドされているため、値が正しくありません。グローバル化

var selectedvalue=[];

もう1つの重要なポイントは、「ここでは、チェックボックスごとに.eachを作成する必要がない」ことです

そして今関数

function checkTick()
{
    $('input[type=checkbox]').change(function () {
            selectedvalue.push($(this).attr("value"));
            document.getElementById('txtSignOff').value = selectedvalue.join("->");

        });
}
于 2013-11-05T07:07:02.137 に答える