2017-02-04 19 views
0

割り当てでは、検索ボタンでイベントリスナーを使用して簡単な検索機能を構築することになっていました。したがって、アルバムのデータベースをシミュレートするオブジェクトのグローバル配列を持つstore.jsというファイルがあります。ユーザーがアーティストを検索すると、結果は新しいページに表示されます。配列をループして結果を得、ページに表示させます。 私が理解できないことは、「検索結果」ページを開き、そこに結果を表示する方法です。結果をグローバル変数に保存し、それを新しいページに表示しようとすると、 "undefined"と表示されます。 これは初心者のクライアントサイドのJSクラスなので、必要な "バックエンド"言語はありません。 私は、あらゆるヒントや批判を感謝します。JavaScriptの簡易検索 - 新しいページに結果を表示するには?

これは、割り当て手順からです:

  1. はsearch.jsというファイルを作成します。
  2. 検索の送信ボタン のonclickイベントを処理するsearchという関数によって処理されるsearch.jsスクリプトでイベントリスナーを作成します。
  3. アーティスト名を入力すると(今はアーティスト名で検索しています)、検索ボックスに「submit」と入力すると、 の検索機能は store.jsのアルバムの偽のデータベースをループしますファイル。新しいページを開き、そのページを のリストに表示します。この部分にはDOM操作を使用する必要があります。

ありがとう!

HTML:

<button id="searchButton">Search</button> 

<div id="displayResult"></div> 

JS:

//Search 
var result = "Nothing found!"; 

function displaySearch() { 
    "use strict"; 

    var displayResult = document.getElementById("displayResult"); 

    window.open("search.html") //How do I display the result in this page? 

    displayResult.style.display = "block"; 
    displayResult.innerHTML = result; 
} 

function doSearch() { 
    "use strict"; 

    var searchField = document.getElementById("searchField").value; 

    for (var i = 0; i < db.length; i++) { 
     if (db[i].artist.toUpperCase() === searchField.toUpperCase()) { 
      result = db[i].artist; 
     } 
    } 

    displaySearch(); 

} 

function search() { 
    "use strict"; 

    var searchButton = document.getElementById("searchButton"); 
    searchButton.addEventListener("click", doSearch, false); 
} 

window.addEventListener("load", search, false); 

FAKE DB:

var db = []; //array of fake album database 

function Album(id, title, artist, price, relDate, qty, tracks) { 
    "use strict"; 
    this.id = id; 
    this.title = title; 
    this.artist = artist; 
    this.price = price; 
    this.relDate = relDate; 
    this.qty = qty; 
    this.tracks = tracks; 
    db.push(this); 
} 

var album1 = new Album("01", "Animals", "Pink Floyd", 18.99, "01/23/1977", 1000, ["1. Pigs on the Wing 1", "2. Dogs", "3. Pigs (Three Different Ones)", "4. Sheep", "5. Pigs on the Wing 2"]); 

var album2 = new Album("02", "Cosmic Slop", "Funkadelic", 19.99, "07/09/1973", 500, ["1. Nappy Dugout", "2. You Can’t Miss What You Can’t Measure", "3. March to the Witch’s Castle", "4. Let’s Make It Last", "5. Cosmic Slop", "6. No Compute", "7. This Broken Heart", "8. Trash A-Go-Go", "9. Can’t Stand the Strain"]); 

var album3 = new Album("03", "Ghost Reveries", "Opeth", 14.99, "08/29/2005", 1500, ["1. Ghost of Perdition", "2. The Baying of the Hounds", "3. Beneath the Mire", "4. Atonement", "5. Reverie/Harlequin Forest", "6. Hours of Wealth", "7. The Grand Conjuration", "8. Isolation Years"]); 
+0

これは学校の割り当てであり、あなたは、私たちはあなたのためにそれを解決したいですか?それからあなたは何を学びますか? :) – CharlieBrown

+0

私は既に課題を提出しました。私はそれを解決したくない、私はそれを行う方法を学びたい。私は解決策ではなく、ヒントを求めています! 「あらゆるヒントや批判に感謝する」 正確な割り当て手順と実際の名前をコピー/ペーストするのはなぜですか?私の教授は愚かではない。 – cabricz

+0

私は冗談を言いました。あなたが必要とするのは、開いているウィンドウの '文書 'にアクセスしてそこで操作することです。 'search.html'が何を持っているのかわかりません。DOMコンテンツを修正したり、空のページを作成したりして結果を作成することができます。 :) – CharlieBrown

答えて

0
//Search 
var result = "Nothing found!"; 

function displaySearch() { 
    var displayResult = document.getElementById("displayResult"); 
    window.history.pushState({},"Test","search.html");//fake redirect 
    document.body.innerHTML = result;//clear all content (trough overriding) + add results 
} 

function doSearch() { 
    var searchField = document.getElementById("searchField").value; 

    result=db.filter(el=>el.artist.toUpperCase()===searchField.toUpperCase()).map(el=>el.artist).join("<br>"); 
    //  filter trough than get the artists name and create a html string out of that array 
    displaySearch(); 

} 

function search() { 
    document.getElementById("searchButton").addEventListener("click", doSearch, false); 
} 

window.addEventListener("load", search, false); 

Uあなたの質問とは異なり、私は完全な解決策を提供しました。しかし、あなたが大丈夫だったので、私はそれが大丈夫だと思った。アイブはまた、あなたが学校から知ることができないES6のものをいくつか追加しました。だから、この答えは不正行為には役に立たないでしょう。アプリケーションが完全にサーバーレスであれば、2つのページは意味をなさない。なぜ、iveがURLの変更を実装したのか、search.htmlは必要ありません。

+0

私はこれを試しましたが、うまくいかなかった。 search.js:7 Uncaught DOMException: 'History'で 'pushState'を実行できませんでした:URL 'file:/// E:/Dropbox/School/COP2803/assignment_3/search.html'を持つ履歴状態オブジェクト原点「null」およびURL「file:/// E:/Dropbox/School/COP2803/assignment_3/index2.html」を含むドキュメントで作成されます。のdisplaySearch(file:/// E:/ Dropbox/School/COP/802 /割り当て_3/js/search.js:16:5) displaySearch @ search.js:7 doSearch @ search.js:16 – cabricz

0

window.openに電話すると、開いたばかりのウィンドウへの参照が返されます。そこから、そのウィンドウのdocumentオブジェクトを取得して、それに書き込んだり、必要に応じて更新したりすることができます。

window.openは、そのコンテキストで禁止されているので、私はあなたに実行可能なスニペットを与えることはできませんが、単にブラウザのコンソールで次のように実行することができます:

var newWin = window.open('', '') //a blank page 
newWin.document.write('HI THERE!') 

あなたのコードに欠けていたものであること。 ;)

0

私は教授からのフィードバックを得ました。 彼は私たちがsessionStorageを使って検索結果を別のページに渡すことを望んでいました。

ありがとうございました。

http://www.w3schools.com/HTML/html5_webstorage.asp

+0

真剣に?単にそれを表示してみませんか?それは私にとって意味をなさない。 –

関連する問題