ContextDi mảng từ đối tượng javascript
Tôi đang cố gắng để thực hiện một chức năng để khi người dùng nhấp vào một hộp kiểm trong một bảng, thuộc tính value
và data-title
của hộp kiểm sẽ được lưu trữ trong một JS đối tượng theo nghĩa đen có tên là selected
làm phần tử mảng cặp khóa-giá trị mới.
Trong trường hợp người dùng nhấp lần thứ hai trên cùng một hộp kiểm, phần tử mảng tương ứng sẽ bị xóa.
Issue
Lần đầu tiên một hộp kiểm được nhấp, một mảng được tạo ra trong đối tượng selected
như dự định.
Tuy nhiên, khi hộp kiểm tương tự được nhấp lần thứ hai, thay vì xóa mảng tương ứng, một số mới (lặp lại) được thêm.
Mã
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);
});
Tại sao không làm cho nó phụ thuộc vào trạng thái 'kiểm tra' của hộp kiểm? Tôi giả sử mảng của bạn nên đại diện cho các hộp hiện đang được kiểm tra. – KWeiss
Đây có thể là vấn đề với 'val.key == $ (this) .attr (" value ")'. Điều này có khả năng (có thể do sự kỳ lạ của sự bình đẳng trong Javascript), không bao giờ trả về đúng sự thật. Có lẽ bạn nên sử dụng [===] (http://stackoverflow.com/questions/359494/does-it-matter-which-equals-operator-vs-i-use-in-javascript-comparisons). [Gỡ lỗi javascript của bạn] (http://stackoverflow.com/questions/988363/how-can-i-debug-my-javascript-code) và kiểm tra điều này – Liam
Câu hỏi được viết độc đáo BTW, được thực hiện tốt. Nếu chỉ có mỗi người dùng đại diện thấp mới được cân nhắc này – Liam