正确使用$ .when - done

时间:2015-01-11 15:51:24

标签: javascript jquery deferred .when

我在图库中有一个搜索功能,它通过检查嵌套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触发器被推送点击下一级别之前的信息)。到目前为止,我没有运气。有什么建议吗?

0 个答案:

没有答案