0
我得到了一個使用角度過濾器的搜索輸入,它工作正常,但有一件事我需要修復但未能至。如果用戶沒有輸入實際存在於scope.names
數組中的任何名稱中的字符,那麼我不希望包含搜索匹配的div完全顯示。這if語句:if (keyValue != scope.names[i].charAt(j))
總是由於某種原因評估爲真,所以即使找到了匹配,也不會顯示div。我檢查了循環是否按照預期工作,並且確實如此,所以問題不在於此。我究竟做錯了什麼?循環訪問名稱數組並檢查按鍵的值是否與名稱中的某個字符匹配
這是被存儲的名稱:
app.controller('addressBookController', function ($scope) {
$scope.names = [];
});
而這裏的處理隱藏/顯示代碼:
var input = document.getElementById('search');
input.addEventListener('keyup', function(e) {
var scope = angular.element(document.getElementById('address-book')).scope();
var searchHits = document.getElementById('search-hits');
var keyValue = String.fromCharCode(e.keyCode);
keyValue = keyValue.toLowerCase() + keyValue.slice(1);
if (input.value.length >= 0) {
searchHits.style.display = 'block';
}
if (input.value.length === 0) {
searchHits.style.display = 'none';
}
for (i = 0; i < scope.names.length; i++) {
for (j = 0; j < scope.names[i].length; j++) {
if (keyValue != scope.names[i].charAt(j)) {
searchHits.style.display = 'none';
}
}
}
不得不用一個顯示div的else調整你的代碼,然後返回。但現在它的作品:) – Chrillewoodz 2014-11-06 10:50:43
偉大。您也可以嘗試在循環中使用var displayFlag,並在退出循環後根據標誌值僅設置一次元素顯示樣式。 – Amitesh 2014-11-06 11:27:23