ContextRimuovere matrice da JavaScript oggetto
Sto cercando di implementare una funzione in modo che quando l'utente seleziona una casella di controllo di una tabella, l'attributo value
e data-title
della casella di controllo devono essere conservati in un JS oggetto letterale chiamato selected
come un nuovo elemento di matrice coppie valore-chiave.
Nel caso in cui l'utente clicchi una seconda volta sulla stessa casella di controllo, l'elemento di matrice corrispondente deve essere rimosso.
emissione
La prima volta una casella viene cliccato, viene creato un array in oggetto selected
come previsto.
Tuttavia, quando viene selezionata la stessa casella di controllo una seconda volta, invece di rimuovere la matrice corrispondente, una nuova (ripetuta) viene aggiunta.
Codice
var selected = {items:[]};
$('#table').on('click', 'input[type="checkbox"]', function() {
var found = false;
$.each(selected.items, function(i, val) {
if (val.key == $(this).attr("value")) {
selected.items.splice(i ,1);
found = true;
return false; //step out of each()
}
});
if (found == false) {
selected.items.push({key: $(this).attr("value"), value: $(this).attr("data-title")});
}
console.log(selected);
});
Perché non farlo dipendere dallo stato 'checked' della checkbox? Presumo che la tua matrice dovrebbe rappresentare le caselle che sono attualmente controllate. – KWeiss
È probabile che si sia verificato un problema con 'val.key == $ (this) .attr (" valore ")'. Questo probabilmente (probabilmente a causa della stranezza dell'uguaglianza in Javascript), non ritorna mai vero. Probabilmente dovresti usare [===] (http://stackoverflow.com/questions/359494/does-it-matter-which-equals-operator-vs-i-use-in-javascript-comparisons). [Debug your javascript] (http://stackoverflow.com/questions/988363/how-can-i-debug-my-javascript-code) e controlla questo – Liam
Domanda ben scritta BTW, ben fatto. Se solo ogni utente con un basso rappresentante era così premuroso, – Liam