我在图库中有一个搜索功能,它通过检查嵌套JSON中某些字段的搜索字词来工作。到目前为止,它找到了我输入的术语,如果找不到则返回警报。所以搜索在这个意义上是正确的,如下所示:
$(document).on('click', '#searchBtn', function (e) {
var searchTerm = $('#searchTerm').val();
for (var i = 0; i < data.category.length; i++) {
if (data.category[i].categoryName.split('<--name-->')[currentLang] === searchTerm) {
console.log('found: ' + searchTerm + ' ' + data.category[i].categoryId);
return populateResults(data.category[i].categoryId);
}
for (var j = 0; j < data.category[i].subcategory.length; j++) {
if (data.category[i].subcategory[j].subcategoryName.split('<--name-->')[currentLang] === searchTerm) {
console.log('found: ' + searchTerm + ' ' + data.category[i].subcategory[j].subcategoryId);
return populateResults(data.category[i].subcategory[j].subcategoryId);
}
for (var k = 0; k < data.category[i].subcategory[j].imgs.length; k++) {
if (data.category[i].subcategory[j].imgs[k].imgName.split('<--name-->')[currentLang] === searchTerm) {
console.log('found: ' + searchTerm + ' ' + data.category[i].subcategory[j].imgs[k].imgId);
return populateResults(data.category[i].subcategory[j].imgs[k].imgId);
}
}
}
}
alert('Search term not found');
e.preventDefault();
});
然而,当它找到一个条目时,它应该通过模拟mouseovers(触发文本的GETting并将其推入一个已加载的文本数组)和一个单击(将文本传递给覆盖):
function populateResults(searchId) {
homeMenu();
if (searchId.length === 1) {
$('#' + searchId).mouseover();
$('#' + searchId).click();
}
else if (searchId.length === 3) {
$.when(
$('#' + searchId[0]).mouseover(),
$('#' + searchId[0]).click()
).done(function () {
$('#' + searchId).mouseover();
$('#' + searchId).click();
});
}
else if (searchId.length === 5) {
....
}
else {
alert('Search malfuncion!');
}
}
问题在于,当您使用清除缓存进行搜索时,它将返回错误的值(因为它没有将值推入加载的文本数组中,这在悬停时发生)。第二次搜索相同的东西时它会提供正确的信息,但是我尝试(正如你在populateResults函数中的第一个if语句中看到的那样)让应用程序等待,直到mouseover触发器被推送点击下一级别之前的信息)。到目前为止,我没有运气。有什么建议吗?