Nella mia applicazione Web, ho impostato una serie di caselle di controllo che popolano una casella di testo sopra di esse (se è selezionata più di una casella di controllo, i loro valori vengono visualizzati nella casella di testo separata da virgole).
Questo set di caselle di controllo appare come righe nella mia tabella HTML.
Ecco il mio codice HTML.
<input type="text" id="newContactComment<%=rCount %>" name="newContactComment" size="45">
<input type="checkbox" id="commentText<%=rCount %>" name="commentText" value="<%=c.getComment_text() %>"
onclick="javascript:updateTextArea(<%=rCount%>);">
E la corrispondente funzione JS è la seguente:
function updateTextArea(rCount) {
var allVals = new Array();
$("#contactInfo input["commentText" + rCount]:checked").each(function() {
(allVals).push($(this).val());
});
$("#newContactComment" + rCount).val(allVals);
}
Il RCount variabile nella funzione sopra è la riga # della mia tabella. Usando questo sopra, non sto ottenendo il comportamento previsto ..
Per es. Se per la riga 1 della mia tabella, controllo chkbox 1 e 2, viene correttamente popolato con i valori di quelle caselle di controllo. Ora, per 2 della mia tabella, controllo solo chkbox 3, viene popolato con i valori 1,2 e 3 e non solo 3 come mi aspetto.
Qualsiasi aiuto sarà molto apprezzato.
risposte:
0 per risposta № 1Sarebbe meglio usare jQuery per impostare un gestore di eventi piuttosto che impostarlo in linea.
Si desidera utilizzare l'evento onchange non l'evento onclick.
Se aggiungi i nomi di classe delle caselle di controllo (o di qualsiasi altra cosa tu voglia) alle caselle di controllo, funzionerà quanto segue:
$("input.checkboxes").change(function(){ //when checkbox is ticked or unticked
var par = $(this).closest("tr")[0];
var parID = par.id;
var patt1=/([0-9]+)$/g;
var rCount = parID.match(patt1); //Gets number off end of id
var allVals = new Array();
//Get all checkboxes in current row that are checked
$(par).find("td input.checkboxes:checked").each(function() {
allVals.push($(this).val());
});
$("#newContactComment" + rCount).val(allVals);
allVals = null; //empty array as not needed
});
Credo che questo o qualcosa del genere farà ciò che vuoi
0 per risposta № 2
Stai cercando di usare il rCount
variabile all'interno della stringa tra virgolette. Prova questo invece:
$("#contactInfo input["commentText" + rCount + ""]:checked")