0

ページに複数のチェックボックスがあります。チェックした場合、その値を取得したい。

これがHTMLコードです。

<input name="ctl1189" type="checkbox" id="chkTicket_189310" class=" chkTicket" value="189310">

<input name="ctl1190" type="checkbox" id="chkTicket_189311" class=" chkTicket" value="189311">

等々..

Javascriptコード:

function updateTicketAction() {
    var allUpdatedVendorTickets = $('.chkTicket').filter(function() { return this.value != $input.is(':unchecked'); });
    var sFinalUpdateList = '';

    allUpdatedVendorTickets.each(function() {
        var ids = $(this).attr('id').split('_')[1];

        sFinalUpdateList += ((sFinalUpdateList == '') ? '' : '|') + ids + ',' + $(this).val();
    });
    alert(sFinalUpdateList);
}
4

6 に答える 6

1
function updateTicketAction() {
    var sFinalUpdateList = '';
    $("input.chkTicket:checked").each( 
        function() { 
           var ids = $(this).attr('id').split('_');
           var id = ids[1];
           sFinalUpdateList += ((sFinalUpdateList == '') ? '' : '|') + id + ',' + $(this).val();
        } 
    );
    alert(sFinalUpdateList);
}

http://jquery-howto.blogspot.com/2008/12/how-to-check-if-checkbox-is-checked.html

于 2012-08-06T07:50:40.580 に答える
0

このコードを試してください

var collect='';
$('input:checked').each(function(i,e){  
    collect+=(collect===''? $(e).attr('name')+'='+$(e).val():','+$(e).attr('name')+'='+$(e).val());
    alert(collect);
})
于 2012-08-06T07:52:26.867 に答える
0

フィルタ機能が間違っています。

this.value != $input.is(':unchecked');

プロパティ (文字列) をjQuery メソッド.valueの戻り値(ブール値)と比較しています。.is次のようになります。

'value' != !true  //checked
'value' != !false //unchecked

どちらも常にtrue-を返します。 valueis0または空の文字列が偽の値に評価され、式の右側が に評価されfalse!=別の演算子が を返しfalseます。

したがって、のコールバックは、値のあるボックスまたは値のないボックスfilterを取り出すことを除いて、何もフィルタリングしません(これは意図的ではありません)。checked0

セレクターfilterを使用して、関数の使用を避けることができます。:checked

var allUpdatedVendorTickets = $('.chkTicket:checked');

これで、checked のみを含む jQuery オブジェクトが得.chkTicketられます。はるかに優れています。


次に、文字列の使い方が悪いです。

"189310,189310|189311,189311"

それがあなたの関数が生成しているものです。これらの結果を操作する必要があるたびに、文字列を で分割して|、新しい配列を作成する必要があります。すでに配列として保存する方がはるかに優れています。

var sFinalUpdateList = [];

キーと値が常に例と同じであると仮定すると、それらも一度だけ保存する必要があります。

allUpdatedVendorTickets.each(function() {
    sFinalUpdateList.push(this.value);
});

これにより、チェックボックスの値のみを使用して、よりクリーンで保守しやすい配列が生成されます。

sFinalUpdateList =>
       [0] -> "189310"
       [1] -> "189311"

これらの値に追加することで、ID を取得できchkTicket_ます。

jsフィドル

于 2012-08-06T08:25:18.227 に答える
0

fiddleを作成しました。JavaScript コンソールで結果のオブジェクトを確認し、さらに処理することができます。

コード:

var checkedCheckboxes = $('.chkTicket:checked'),
    results = {};

checkedCheckboxes.each(function () {
    var key = $(this).attr('id').split('_')[1];
    results[key] = $(this).val();
});

function alertResults(results) {
    var text = '', sep = '';
    $.each(results, function (key, value) {
        text += sep + key + '=' + value;
        sep = '|';
    });
    alert(text);
}

alertResults(results);
console.log(results);
于 2012-08-06T08:07:52.050 に答える
0

これは、チェックされたすべての入力を返すjsfiddle スニペットです.. 1 つの質問ですが、id を値属性に保存しているのに、なぜ id 属性を分割するのですか? とにかく、これがうまくいくことを願っています!

function updateTicketAction() {
  var allUpdatedVendorTickets = $('.chkTicket:checked');
  var sFinalUpdateList = '';

  allUpdatedVendorTickets.each(function () {
    sFinalUpdateList += ((sFinalUpdateList == '') ? '' : '|') + $(this).val();
  }); 

  alert(sFinalUpdateList);
}
于 2012-08-06T08:10:05.527 に答える
0

または、map() を使用できます。

var el = $('input[type=checkbox]:checked').map(function(i,e){

        var id = $(e).attr('id').replace('chkTicket_', '');
        var val = $(e).val();

        return {
                'id' : id,
                'value' : val
               }

    });

console.log(el[0].id);
于 2012-08-06T08:10:58.073 に答える