我正在使用angular,我試圖創建一個「全選」按鈕。indexof - 檢查一個值是否已經在javascript數組中)
我有一個項目列表,每個項目都有一個切換,我正在做的是,在變化(每次切換從真(選擇)變爲假(未選定),我運行一個函數來創建一個數組與
所選元素的所有ID。這工作幾乎是完美的,問題是我面臨的indexfOf方法的一些問題,以檢查是否ID已在數組中。
var isInArray;
isInArray = function(arr, id) {
console.log("index of ", arr.indexOf(id));
return arr.indexOf(id);
};
scope.evtSelectAll = function() {
return angular.forEach(scope.listToDisplay, function(element) {
element.copyTo = true;
return scope.selectFromList(element.iID, element.copyTo);
});
};
scope.selectFromList = function(id, copy) {
if (copy === true && isInArray(scope.selected, id) === -1) {
scope.selected.push(id);
} else {
scope.selected.pop(id);
}
console.log("scope.selected - ", scope.selected);
if (scope.selected.length > 0) {
console.log("Emitted event: can proceed!");
scope.$emit('enough-elements');
} else {
console.log("Emitted event: can not proceed!");
scope.$emit('not-enough-elements');
}
return scope.result = scope.selected;
};
的我得到的問題是當數組(scope.selected)有多個ID時
比方說,例如,我的scope.selected看起來像這樣:
scope.selected = [2,3,4,7]
如果我點擊全選,沒有被添加(這是正確的)
現在,讓我們說我勾去掉4和7例如,我的scope.selected現在看起來是這樣的:
scope.selected = [2,3]
如果我現在點擊全選,我的結果如下:[2,4,7]。
我失去了
我認爲這是由於這樣的事實,我的數組沒有一個單一的項目?
感謝您的任何幫助。這裏還有一個快速的codepen來解釋這個問題。如果您檢查控制檯並使用切換進行播放,您應該能夠立即看到我所指的內容。
在此先感謝
如果完全清空$ scope.selected,並且一旦發生切換,通過重新分析列表中選中的元素來重新創建它會是一個問題嗎? –
不,我不明白爲什麼它應該是一個誠實的問題。我只需要小心地將它清空,只是選擇我猜的全部,對吧? – Nick
至少在codepen示例中,'element.iID'應改爲'element.id' – Matthias