无法搜索数组项

时间:2013-12-02 14:34:57

标签: javascript

在这个程序中,我无法搜索数组中的项目。 db变量已经定义。我无法进入搜索功能并运行它。只是好奇为什么会发生这种情况。我能够运行第一个验证功能,但然后停止,不会执行其余的代码。

    // Create privatized scope using a self-executing function
    (function() {
        console.log("hello");
        // Variable initialization (DO NOT FIX ANY OF THE BELOW VAR's)
        var resultsDIV = document.getElementById("results"),
            searchInput = document.forms[0].search,
            currentSearch = '';


        // Validates search query
        var validate = function (query) {
            console.log("validate");
            // Trim whitespace from start and end of search query
                query = query.trim();
            // Check search length, must have 3 characters
            if (query.length < 3) {
                alert("Your search query is too small, try again.");
               }else{
                search(query);

            // (DO NOT FIX THE LINE DIRECTLY BELOW)
            searchInput.focus();
            }
            console.log("test");
        };



            console.log("outside search function");
        // Finds search matches
        var search = function (query) {
            console.log("In search function");
            // split the user's search query string into an array
            var queryArray = query.split(" ");

            // array to store matched results from database.js
            var results = [];
            // loop through each index of db array
            for (var i = 0, j = db.length; i < j; i++) {
                console.log(i);
                // each db[i] is a single video item, each title ends with a pipe "|"
                // save a lowercase variable of the video title
                var dbTitleEnd = db[i].indexOf('|');
                var dbItems = db[i].toLowerCase().substring(0, dbTitleEnd);

            }
            // loop through the user's search query words
            // save a lowercase variable of the search keyword
            for (var ii = 0, jj = queryArray.length; ii < jj; ii++) {
                var qItem = queryArray[ii].toLowerCase();
            }
                // is the keyword anywhere in the video title?
                // If a match is found, push full db[i] into results array
                var compare = dbItems.indexOf(qItem);
                if (compare !== -1) {
                    results = results.push(db[i]);
                }

                results.sort();





            // Check that matches were found, and run output functions
        if (results.length === 0) {
            noMatch();
        } else {
            showMatches(results);
        }

        };

            // Put "No Results" message into page (DO NOT FIX THE HTML VAR NOR THE innerHTML)


            var noMatch = function() {

                var html = '' +
                        '<p>No Results found.</p>' +
                        '<p style="font-size:10px;">Try searching for "JavaScript".  Just an idea.</p>'
                    ;
                resultsDIV.innerHTML = html;
            };

            // Put matches into page as paragraphs with anchors


            var showMatches = function (results) {


                // THE NEXT 4 LINES ARE CORRECT.
                var html = '<p>Results</p>',
                    title,
                    url
                    ;

                // loop through all the results search() function
                for (var i = 0, j = results.length; i < j; i++) {

                    // title of video ends with pipe
                    // pull the title's string using index numbers
                    var titleEnd = results[i].indexOf('|');
                    title = results[i].subString(0, titleEnd);

                    // pull the video url after the title
                    url = results[i].substring(results[i].indexOf('|') + 1, results[i].length);

                    // make the video link - THE NEXT LINE IS CORRECT.
                    html += '<p><a href=' + url + '>' + title + '</a></p>';

                    resultsDIV.innerHTML = html; //THIS LINE IS CORRECT.
                }

        };






    console.log("start of program");
    /***** start of program *******/
        // The onsubmit event will be reviewed in upcoming Course Material.
        // THE LINE DIRECTLY BELOW IS CORRECT
        document.forms[0].onsubmit = function(){
            var query = searchInput.value;

            validate(query);




            // return false is needed for most events - this will be reviewed in upcoming course material
            // THE LINE DIRECTLY BELOW IS CORRECT
            return false;
        };

        })();

1 个答案:

答案 0 :(得分:0)

我检查了你的代码,一切都在那里但不知何故都错了。您似乎对for循环有完全错误的概念。我做了几处小改动:

  • 查询在阅读时被修剪,因为我们不仅需要验证器

  • 验证

    • 如果查询太短,请设置焦点
    • 验证了它,但也允许在出现错误时继续操作
    • 更改为isValid()并签入onsubmit handler
  • 搜索:

    • 错误的for循环概念
    • 检索dbTitleEnd / dbItems,然后用下一个覆盖它们
    • 不需要results = results.push(db[i]);,只需要`results.push(db [i]);
    • subString()更正为substring()
  • console.log()消息保留在

请参阅Example in jsFiddle