2017-10-19 14 views
1

私は動的に作成されるhtmlテーブルを持っています。各行にチェックボックスを追加する一度に複数のチェックボックスを選択するにはどうすればよいですか?

$.each(data, function(id, value) { 
    rows.push('<tr><td><input type="checkbox" autocomplete="off" class="chkbox" name="chkbox" value="'+value.site+':'+value.client+'"></td><td>' + id + '</td><td>' + value.machine + '</td><td>' + value.state + '</td><td>' + value.date_processed + '</td><td><button type="button" onclick="resetSite(\''+ value.site+'\',\''+value.client+'\')">Reset</td></tr>'); 
}); 

私は一度に複数の行を選択し、バックエンドサービスに値をPOSTする必要があります。 現在、JavaScriptの機能は次のとおりです。

$(document).on('change','.chkbox',function() { 
    var sites = []; 
    var value = $(this).val(); 
    var res = value.split(":"); 
    $.each($("input[class='chkbox']:checked"), function(){    
    sites.push(res[0]); 
    }); 
    alert("sites are: " + sites.join(", ")); 
    $.ajax({ 
    type: "POST", 
    url: "http://localhost:8080/cache/setProcessing?site="+res[0]+"&client="+res[1], 
    /*data: { 
     chkbox: value 
    },*/ 
    error : function(xhr, textStatus, errorThrown) { 
     alert("Failed. Error : " + errorThrown); 
    } 
    }); 
}); 

上記の機能では、複数の行を選択すると、アラートボックスに同じサイトが複数回表示されます。 どうすればこの問題を解決できますか?

+0

...チェックされたすべてのチェックボックスを知っているし、そこに対応する値を取得するためにeach functionvalueresを置く必要があります私はこの問題は、この 'sites.push(RES [0])だと思います。 'それでは常に' res [0] 'の値をプッシュするだけです.. –

+0

このres [0]は何ですか?常に常に同じ値をプッシュします。 – Se0ng11

+0

@ShadowFiendいいえ、resには「+ value.site +」という結合値が含まれます: '+ value.client」。最初の配列[0]の値を分割して取得します。 – Ratha

答えて

2

変更

$(document).on('change','.chkbox',function() { 
    var sites = []; 
    var value = $(this).val(); 
    var res = value.split(":"); 
    $.each($("input[class='chkbox']:checked"), function(){    
    sites.push(res[0]); 
    }); 
    alert("sites are: " + sites.join(", ")); 
    $.ajax({ 
    type: "POST", 
    url: "http://localhost:8080/cache/setProcessing?site="+res[0]+"&client="+res[1], 
    /*data: { 
     chkbox: value 
    },*/ 
    error : function(xhr, textStatus, errorThrown) { 
     alert("Failed. Error : " + errorThrown); 
    } 
    }); 
}); 

COR・再・それに相当・前のコードでは、それは唯一のあなたがクリックした現在のチェックボックスの値を取得するので

$(document).on('change','.chkbox',function() { 
    var sites = []; 
    $.each($("input[class='chkbox']:checked"), function(){  
    var value = $(this).val(); // must me be inside the each 
    var res = value.split(":"); // must me be inside the each  
    sites.push(res[0]); 
    }); 
    alert("sites are: " + sites.join(", ")); 
    $.ajax({ 
    type: "POST", 
    url: "http://localhost:8080/cache/setProcessing?site="+res[0]+"&client="+res[1], 
    /*data: { 
     chkbox: value 
    },*/ 
    error : function(xhr, textStatus, errorThrown) { 
     alert("Failed. Error : " + errorThrown); 
    } 
    }); 
}); 

をする。

ですから、

+0

ここでAjaxコールを変更するにはどうすればいいですか?今度は毎回バックエンドを呼び出します。チェックボックスプロセスが終了したら、私はそれを呼びたいと思っています – Ratha

+0

@Ratha *チェックボックスプロセスは何を意味しますか*? –

+0

申し訳ありません私の悪い...これは私の要件のためのoKです。私は、複数の行を選択した後、バックエンドサービス – Ratha

関連する問題