Preluare valoare Checkbox in Javascript

Discutii si intrebari legate de scripturi si functii JavaScript, jQuery si Ajax, cod JavaScript in general.
andras
Mesaje:430

Preluare valoare Checkbox in Javascript

Salut,
Am checkbox-uri intr-o tabela html (nu sunt in <form>). Vreau ca la actionarea unui buton sa le identific pe cele bifate si sa le duc intr-o baza de date. Folosesc Ajax(), sau exista o metoda mai simpla?

MarPlo Mesaje:4343
Vezi exemplu de la pagina: Get the value of the selected /checked checkboxes.
Daca checkbox-urile nu sunt intr-un <form>, in loc de:

Cod: Selectaţi tot

getSelectedChbox(this.form);
Poti folosi elementul parinte cu iD-ul lui:

Cod: Selectaţi tot

getSelectedChbox(document.getElementById('id_tabel'));
- Te poti inspira din acel exemplu si modifici functia SelectedChbox() sa returneze ce ai nevoie.

andras Mesaje:430
Salut,
Eu am nevoie de datele din toate coloanele tabelului (t_draggable1), asa ca folosesc Ajax() care arata asa:

Cod: Selectaţi tot

<script type="text/javascript">
$(document).ready(function() {
  $('#sc1').click(function() {

         var get_table_tds = getTableData('t_draggable1');   
        var json_sr_tds = JSON.stringify(get_table_tds);    // JSON string with table data

           function getTableData(id) {
                // function to get table cells data (from: https://coursesweb.net/ )
                // receives table ID. Returns 2 dimensional array with TD data in each row
                var t_rows = document.getElementById(id).querySelectorAll('tbody tr');    // rows from tbody
                var t_data = [];    // will store data from each TD of each row
                var ix = 0;    // index of rows in t_data

                // gets and dds td data in t_data
                for(var i=0; i<t_rows.length; i++) {
                    var row_tds = t_rows[i].querySelectorAll('td');
                    if(row_tds.length > 0) {
                        t_data[ix] = [];
                        for(var i2=0; i2<row_tds.length; i2++)
                            t_data[ix].push((row_tds[i2].innerText || row_tds[i2].textContent));
                        ix++;
                    }
                }
                return t_data;
            }
             var data_jsonc1={"tablouc1":json_sr_tds };
            my_ajaxc1("muta1.php",data_jsonc1,"post");
                    function my_ajaxc1(phpfile, data_jsonc1, type) {  // muta in lista1
                $.ajax({
                    async:false,
                    type: type,
                    url: phpfile,
                    data: data_jsonc1,
                    success: function(msgc1) {
                            alert(msgc1);        
                    },
                    error: function(jqXHR, exception) {
                        if (jqXHR.status === 0) {
                            alert('Not connect.\n Verify Network.');
                        } 
                    }
                });
                //    window.location.href='com?';  
  }
});    
});   
 </script>
Problema la mine este ca prima coloana din tabela fiind <input type="checkbox">, in fisierul muta1.php dupa:

Cod: Selectaţi tot

$tablouphp= json_decode($_REQUEST['tablouc1']);
echo var_dump($tablouphp); 
Nu imi apare nici o valoare corespunzatoare lui checkbox, imi apare ceva de genul: [0]=>string(0)"" , deci n-a preluat nimic desi checkbox-ul este bifat in tabela. Restul datelor apar normal. Cum atribui o valoare la checkbox cind bifez in tabela? Multumesc.

MarPlo Mesaje:4343
Valoarea la checkbox se adauga in attributul lui "value".
Incearca asa, adauga un id la acel checkbox, iar in codul javascript se preia valoarea daca e bifat astfel:

Cod: Selectaţi tot

var chkbox = (document.getElementById('idul').checked == true) ? document.getElementById('idul').value : '';

andras Mesaje:430
Salut,
Am incercat sa fac asa dar ceva nu merge. In <td> am pus:

Cod: Selectaţi tot

<td  style="width:30px; height: 40px; text-align:center; border-style:outset;">
<input type="checkbox" id="c<?php echo trim($i); ?>"  onchange="if (this.checked) {this.parentNode.style.background='#ef4d35'; this.value='1'; } else {this.parentNode.style.background='white';this.value='0';}"  style="font-size: 300%;" ></td>
Iar in functia JQuery am pus:

Cod: Selectaţi tot

<script type="text/javascript">
$(document).ready(function() {
$('#sc1').click(function() {

var get_table_tds = getTableData('t_draggable1');
var json_sr_tds = JSON.stringify(get_table_tds);    // JSON string with table data
alert(json_sr_tds);   // acest alert nu merge pentru ca este dupa iesirea din functia getTableData()
function getTableData(id) {
    var t_rows = document.getElementById(id).querySelectorAll('tbody tr');
    var t_data = [];
    var ix = 0;
    var chkbox ='';
    for (var i = 0; i < t_rows.length; i++) {
   chkbox = (document.getElementById('c'+i).checked==true) ? document.getElementById('c'+i).value : '';    
    alert(chkbox);  // acest alert merge (afiseaza '1' sau '')
    alert(document.getElementById('c'+i).id);  // acest alert merge (afiseaza c0, c1, c2, c3 etc). Este ultimul alert care merge
    var row_tds = t_rows[i].querySelectorAll('td');
    if (row_tds.length > 0) {
	   t_data[ix] = [];
t_data[ix].push(chkbox);   // aici incerc sa pun valoarea checkbox-ului. 
	   for (var i2 = 0; i2 < row_tds.length; i2++)   // si restul datelor din row
			 t_data[ix].push(row_tds[i2].innerText || row_tds[i2].textContent);
	   ix++;
	}
	}
		return t_data;
}
var data_jsonc1 = {"tablouc1" : json_sr_tds};
my_ajaxc1("muta1.php", data_jsonc1, "post");
function my_ajaxc1(phpfile, data_jsonc1, type) {// muta in lista1
$.ajax({
    async : false,
    type : type,
    url : phpfile,
    data : data_jsonc1,
    success : function(msgc1) {
        alert(msgc1);
},
    error : function(jqXHR, exception) {
        if (jqXHR.status === 0) {
            alert('Not connect.\n Verify Network.');
        }
    }
});
//    window.location.href='com?';
}
});   
});
</script>
Nu mai ajunge la functia ajax, se impiedica undeva in functia getTableData(id) in bucla. Daca in aceasta functie sterg definirea variabilei chkbox toate alert-urile functioneaza normal. Care sa fie cauza?

MarPlo Mesaje:4343
Incearca sa scoti t_data[ix] = []; din bucla for(), sa fie inainte. Poti verifica si ce returneaza functia getTableData() (la apelarea ei).
In rest nu stiu daca e alta cauza, cam mult cod de verificat care nici nu poate fi testat.
Totusi ceea ce vrei sa obtii poate fi mai complicat decat pare, fiindca in php e nevoie si de numele campului trimis impreuna cu valoarea lui, pentru asta, la functyia ajax trebuie adaugat si numele ("nume=valoare", sau obiect JSON cu elemente "nume: valoare").

andras Mesaje:430
Am rezolvat-o pana la urma. Am disecat fiecare cuvint din cod si era o neconcordanta intre indici (i, ix, i2) foarte greu de observat. Am trimis prin ajax() un array cu toate valorile din tabelul html. Acum functioneaza. Multumesc!