【问题标题】:Printing out multiple search results打印出多个搜索结果
【发布时间】:2017-10-01 14:41:42
【问题描述】:

所以,我正在开发一个具有搜索功能的网页,用户可以在其中输入事件名称和朋友的姓名,页面将根据这些输入显示搜索结果。

提前道歉,我的代码绝对是一团糟(但它有效,这就是我现在关心的全部)但是,我的问题是,我不知道打印出所有搜索结果的好方法。我在网上查了一下,我现在有以下内容:

$('#searchFeedback').empty();
$.each(data.events[i], function (index, value) {
    $('#searchFeedback').append(output);
})

这是我找到的最好的选择(也是唯一一个以任何方式工作的选项,即使我必须混合使用 JQuery),但问题是它重复打印出最后一个搜索结果,甚至没有正确的数量,而不是打印出每个搜索结果。我对 JQuery 完全一无所知。

这是我的整个 JS 代码:

<script>

                    function eventSearch() {
                        var eName = document.getElementById("ename").value;
                        var fName = document.getElementById("fname").value;
                        var searchResults = "";
                        var friendResults = "";
                        var attendeeText = "";

                        if (eName === "" && fName === "") {

document.getElementById("searchFeedback").innerHTML = "<h4 class='eName'>Fields cannot be empty!</h4>";

                        } else {

                            for (var i = 0; i < data.events.length; i++) {

                                searchResults = data.events[i].eName.toUpperCase();

                                var output = "<h4 class='eName'>" + data.events[i].eName + " &bull; " + data.events[i].date + "</h4> <p class='eDesc'>" + data.events[i].description + "<br><sub>" + attendeeText + "<a class='event' onclick='openEventLink(" + i + ");' href=''><b> Check it out here.</b> </a></sub></p><br>";

                                if (eName != "" && searchResults.includes(eName.toUpperCase())) {

                                    if (data.events[i].attendees.length != 1) {
                                        for (var a = 0; a < data.events[i].attendees.length; a++) {
                                            attendeeText = data.events[i].attendees.join(", ");
                                        }
                                    } else {
                                        attendeeText = data.events[i].attendees;
                                    }


                                    if (data.events[i].attendees.length > 1) {
                                        attendeeText = attendeeText + " are going.";
                                    } else if (data.events[i].attendees.length == 1) {
                                        attendeeText = attendeeText + " is going.";
                                    } else {
                                        attendeeText = "";
                                    }

                                    if (fName != "") {
                                        for (var a = 0; a < data.events[i].attendees.length; a++) {
                                            friendResults = data.events[i].attendees[a].toUpperCase();
                                            if (friendResults.includes(fName.toUpperCase())) {

                                                console.log(searchResults);
                                                console.log(friendResults);

                                                $('#searchFeedback').empty();
                                                $.each(data.events[i], function (index, value) {
                                                    $('#searchFeedback').append(output);
                                                })

                                            }
                                        }


                                    } else {
                                        // Print results
                                    }



                                } else if (eName == "" && fName != "") {
                                    for (var a = 0; a < data.events[i].attendees.length; a++) {

                                        if (friendResults.includes(fName.toUpperCase())) {
                                            console.log(friendResults);
                                            console.log(data.events[i].eName);

                                            if (data.events[i].attendees.length != 1) {
                                                for (var a = 0; a < data.events[i].attendees.length; a++) {
                                                    attendeeText = data.events[i].attendees.join(", ");
                                                }
                                            } else {
                                                attendeeText = data.events[i].attendees;
                                            }


                                            if (data.events[i].attendees.length > 1) {
                                                attendeeText = attendeeText + " are going.";
                                            } else if (data.events[i].attendees.length == 1) {
                                                attendeeText = attendeeText + " is going.";
                                            } else {
                                                attendeeText = "";
                                            }

                                           // Print results


                                        }
                                    }
                                }
                            }
                        }    
                    }

                    /* document.getElementById("searchFeedback").innerHTML =
                                                "<h4 class='eName'>" + data.events[i].eName + " &bull; " + data.events[i].date + "</h4> <p class='eDesc'>" + data.events[i].description + "<br><sub>" + attendeeText + "<a class='event' onclick='openEventLink(" + i + ");' href=''><b> Check it out here.</b> </a></sub></p><br>"; */

</script>

非常感谢!

编辑:这是我的数据库的结构。里面还有很多东西,但这里是相关的部分。

var data = {
   "events": [
      {
        "eName": "The Dalek Invasion of Earth",
        "date": "6.5.2017",
        "time": "10-15",
        "description": "People assume that time is a strict progression of cause-and-effect... but actually, from a non-linear, non-subjective viewpoint, it's more like a big ball of wibbly-wobbly... timey-wimey... stuff. It is! It's the city of New New York! Strictly speaking, it's the fifteenth New York since the original, so that makes it New-New-New-New-New-New-New-New-New-New-New-New-New-New-New New York. Goodbye...my Sarah Jane! Yeah? Well I'm the Lord of Time. Black tie...Whenever I wear this, something bad always happens.",
        "attendees": ["Jack Harkness", "Rose Tyler"],
        "eLink": "http://tardis.wikia.com/wiki/The_Dalek_Invasion_of_Earth_(TV_story)"
      },
      {
        "eName": "The Day of the Doctor",
        "date": "7.5.2017",
        "time": "15-18",
        "description": "I'm sorry. I'm so sorry. There's something else I've always wanted to say: Allons-y, Alonso! I don't want to go. Allons-y! What? What?! WHAT?! It is! It's the city of New New York! Strictly speaking, it's the fifteenth New York since the original, so that makes it New-New-New-New-New-New-New-New-New-New-New-New-New-New-New New York. Oh, yes. Harmless is just the word: that's why I like it! Doesn't kill, doesn't wound, doesn't maim. But I'll tell you what it does do: it is very good at opening doors!",
        "attendees": ["Amelia Pond", "Donna Noble"],
        "eLink": "http://tardis.wikia.com/wiki/The_Day_of_the_Doctor_(TV_story)"
      }
  ]
};

Edit2:如果有帮助,我也会添加表单的 HTML。

<div class="eventSearch">
                <h2>Search for events</h2>

                <form id="login" onsubmit="return eventSearch()">
                    <b>By event name:</b> <input type="text" name="ename" id="ename" size="56" placeholder="i.e. The Time War"><br>
                    <b>By a friend's name:</b> <input type="text" name="fname" id="fname" size="50" placeholder="i.e. Rose Tyler"><br><br>

                    <input type="radio" name="dates" value="allDates" checked> All events<br>
                    <input type="radio" name="dates" value="pastDates"> Past events<br>
                    <input type="radio" name="dates" value="futureDates"> Future events<br><br>

                    <button type="submit" id="confSearch" name="confSearch" onclick="event.preventDefault(); eventSearch();"><b>Search</b></button><br><br>

                </form>

                <div id="searchFeedback"></div>

甚至另一个编辑:为了进一步澄清,这是我网页的实时版本:http://users.metropolia.fi/~natalisu/Event%20calendar/main.html

【问题讨论】:

  • 可能因为$('#searchFeedback').empty();,它的打印才最后?
  • 删除该行没有任何区别,所以不能那样。
  • 好的,那么data.events[i] 是什么?可以在这里展示一下吗?
  • 我会把它添加到帖子中。一秒钟!
  • attendeeText 的用途是什么?和friendResults?

标签: javascript jquery html search append


【解决方案1】:

我不确定,但也许会有所帮助

$('button').click(eventSearch);

var data = {
   "events": [
      {
        "eName": "The Dalek Invasion of Earth",
        "date": "6.5.2017",
        "time": "10-15",
        "description": "People assume that time is a strict progression of cause-and-effect... but actually, from a non-linear, non-subjective viewpoint, it's more like a big ball of wibbly-wobbly... timey-wimey... stuff. It is! It's the city of New New York! Strictly speaking, it's the fifteenth New York since the original, so that makes it New-New-New-New-New-New-New-New-New-New-New-New-New-New-New New York. Goodbye...my Sarah Jane! Yeah? Well I'm the Lord of Time. Black tie...Whenever I wear this, something bad always happens.",
        "attendees": ["Jack Harkness", "Rose Tyler"],
        "eLink": "http://tardis.wikia.com/wiki/The_Dalek_Invasion_of_Earth_(TV_story)"
      },
      {
        "eName": "The Day of the Doctor",
        "date": "7.5.2017",
        "time": "15-18",
        "description": "I'm sorry. I'm so sorry. There's something else I've always wanted to say: Allons-y, Alonso! I don't want to go. Allons-y! What? What?! WHAT?! It is! It's the city of New New York! Strictly speaking, it's the fifteenth New York since the original, so that makes it New-New-New-New-New-New-New-New-New-New-New-New-New-New-New New York. Oh, yes. Harmless is just the word: that's why I like it! Doesn't kill, doesn't wound, doesn't maim. But I'll tell you what it does do: it is very good at opening doors!",
        "attendees": ["Amelia Pond", "Donna Noble"],
        "eLink": "http://tardis.wikia.com/wiki/The_Day_of_the_Doctor_(TV_story)"
      }
  ]
};
function eventSearch() {
    var eName = document.getElementById("ename").value || "";
    var fName = document.getElementById("fname").value || "";
    var searchResultsEname = "";

    var friendResults = "";
    var attendeeText = "";


    $('#searchFeedback').empty();

    if (eName === "" && fName === "") {

        document.getElementById("searchFeedback").innerHTML = "<h4 class='eName'>Fields cannot be empty!</h4>";

    } else {

        for (var i = 0; i < data.events.length; i++) {

            searchResultsEname = data.events[i].eName.toUpperCase();
            

            console.log(searchResultsEname);
            
            console.log(friendResults);

            var output = "<h4 class='eName'>" + data.events[i].eName + " &bull; " + data.events[i].date + "</h4> <p class='eDesc'>" + data.events[i].description + "<br><sub>" + attendeeText + "<a class='event' onclick='openEventLink(" + i + ");' href=''><b> Check it out here.</b> </a></sub></p><br>";

            if (eName != "" && searchResultsEname.includes(eName.toUpperCase())) {

                if (data.events[i].attendees.length != 1) {
                    for (var a = 0; a < data.events[i].attendees.length; a++) {
                        attendeeText = data.events[i].attendees.join(", ");
                    }
                } else {
                    attendeeText = data.events[i].attendees;
                }


                if (data.events[i].attendees.length > 1) {
                    attendeeText = attendeeText + " are going.";
                } else if (data.events[i].attendees.length == 1) {
                    attendeeText = attendeeText + " is going.";
                } else {
                    attendeeText = "";
                }


                $('#searchFeedback').append(output);
                

            } 

            if (fName != "") {

                for (var a = 0; a < data.events[i].attendees.length; a++) {
                    friendResults = data.events[i].attendees[a].toUpperCase();

console.log(friendResults);
                    if (friendResults.includes(fName.toUpperCase())) {

                        $('#searchFeedback').append(output);

                    }
                }
             
                    
            } 
        }
    }
}

eventSearch();
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>


<label for="ename">eName    <input type="text" id="ename" value="The Dalek Invasion of Earth"></label>
<label for="fname">fName
<input type="text" id="fname" value=""></label>

<button>Search</button>

<div id="searchFeedback">
  
</div>

【讨论】:

  • 不幸的是,这不起作用。搜索不正常,只再次显示一个结果。
  • 这样的作品!它按预期显示搜索结果,但它分别搜索两个输入,这意味着事件名称搜索输出某些事件,朋友名称搜索输出其他事件,而不是搜索与事件名称输入以及朋友名称匹配的事件输入。所以现在我有时会两次收到一些事件。此外,朋友搜索本身也不起作用。
  • 好的。当我们得到重复时添加更多数据,我猜可以通过id删除重复来修复它。 Also, friend search doesn't work on its own 是什么?
猜你喜欢
  • 2017-09-29
  • 1970-01-01
  • 2014-08-03
  • 2018-07-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-06
  • 2015-09-11
相关资源
最近更新 更多