検索フォームを自動で実行させたい

このQ&Aのポイント
  • 検索フォームを自動で実行させたい
  • "prototype.jsでYouTubeをインクリメンタルサーチ"というタイトルのページにて、入力フォームにワードを打ち込むとそのワードのyoutube動画を検索表示させる、という内容の記事がありまして、そちらのサンプルソースを試してみました。
  • 入力フォームにvalue="animal"として、検索ページが表示されると自動でanimalの検索結果を表示させたいと思ったです。
回答を見る
  • ベストアンサー

検索フォームを自動で実行させたい

お世話になります。 "prototype.jsでYouTubeをインクリメンタルサーチ"というタイトルのページにて、入力フォームにワードを打ち込むとそのワードのyoutube動画を検索表示させる、という内容の記事がありまして、そちらのサンプルソースを試してみました。 参考URL http://www.atmarkit.co.jp/fwcr/rensai/ajaxrecipe02/ajaxrecipe02_1.html 上記のプログラムを試してみると、HTMLページに検索フォームが設けられており、そこにワードを打ちこんでみると、該当javascriptが1文字打ち込むごとにYoutubeから検索結果を拾って、検索フォームの下スペースに動画リストとして表示してくれました。無事に動いてくれたのでこのサンプルコードに少しカスタマイズをしてみたのですが、ここで躓いてしまいました。。 入力フォームにvalue="animal"として、検索ページが表示されると自動でanimalの検索結果を表示させたいと思ったです。 ですが、実際にはフォームエリアにはanimalと表示されていますが、検索アクションがされない状態です。 私はjavascriptなど勉強中の初心者なので調べてみているのですが、これを自動で表示させるには、form部分にonChange="○○○"、javascript側にwindow.onload = function(){ ○○○();}というものを使えばできるような感じでしたが、どうにもうまく動きません。 もしご教授頂けるという方がいらっしゃったら是非お願いしたいです。宜しくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • yyr446
  • ベストアンサー率65% (870/1330)
回答No.2

ちなみにご提示の参考URL http://www.atmarkit.co.jp/fwcr/rensai/ajaxrecipe02/ajaxrecipe02_1.html ですが、FireFox3.5では現在動作(動画再生)しないみたいです。 理由は、「live_search_controller.js」の中で $('search_results').getElementsByClassName('video').each(function(element, index) { 33 element.observe("click", youtube.controller.select); 34 }); があり、prototype.jsのgetElementsByClassNameとFirefoxの getElementsByClassNameのバッティング問題が発生するからだと思う。 このサンプルに固執せず、インクリメンタルサーチとか、lightwindowはとりあえず、後回しにして、「Google YouTube Data API」 を直接使って作った方が.... http://code.google.com/intl/ja/apis/youtube/reference.html 又は「Google AJAX Search API」のgoogle.search.VideoSearch を使うとか http://code.google.com/intl/ja/apis/ajaxsearch/documentation/reference.html#_class_GvideoSearch

atsuya192
質問者

お礼

サンプルや解説をご提示頂き、色々有難うございました。 Google YouTube Data APIについても色々と勉強してみました。 確かにAPIを使ったほうがスムーズかなと思いました。 ですがご提示頂いたサンプルも大変良いものですねぇ。 これから色々とさわってみながら動作や挙動を確認したいと思いますが、とりあえず一旦質問を締め切らせてお礼ポイントを付与いたします。 有難うございました。

その他の回答 (3)

  • yyr446
  • ベストアンサー率65% (870/1330)
回答No.4

//17歳のエッチなJKです。 まだ締め切ってなかったものでさらに追加 ※インクリメンタルサーチも実装しました。アニマルで初期検索した後、 追加のキーワード文字列が入力されるたびに自動検索されていき、 最初にヒットした動画が再生されます。 同じく「Google AJAX Search API」のgoogle.search.VideoSearch http://code.google.com/intl/ja/apis/ajaxsearch/documentation/reference.html#_class_GvideoSearch を使ってますがユーザー定義のgoogle.search.SearchFormで制御するのでなく、google.search.SearchControlを使えばその機能がありました。 http://code.google.com/intl/ja/apis/ajaxsearch/documentation/reference.html#_class_GSearchControl (サンプルURL) 参照URL (サンプルコード) <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" lang="ja-JP"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> <meta http-equiv="Content-Script-Type" content="text/javascript"/> <meta http-equiv="Content-Style-Type" content="text/css"/> <meta http-equiv="Cache-Control" content="no-cache"/> <meta http-equiv="Expires" content="0" /> <title>Google Video Search for YouTube</title> <style type="text/css"></style> <script type="text/javascript" src="http://www.google.com/jsapi?key=ABQIAAAAG93o66s6C1e8nCJDkjmJ0xSVVYxLupw9AvipHbcBrNMoQN8XSBRA6NK6XyYISfT41Z7mY_whiu7HMg"></script> <script type="text/javascript"> google.load("search", "1"); </script> <link rel="stylesheet" type="text/css" href="/jslib/shadowbox/shadowbox.css"> <script type="text/javascript" charset="utf-8" src="/jslib/jquery-1.3.2.min.js"></script> <script type="text/javascript" src="/jslib/shadowbox/shadowbox.js"></script> <script type="text/javascript" charset="utf-8"> //<![CDATA[ Shadowbox.init({ language: 'ja', players: ['swf','flv'] }); //]]> </script> <script type="text/javascript" charset="utf-8"> //<![CDATA[ //var searchControl; $(document).ready(function(){ $("#kensaku_key").val("アニマル"); var searchControl = new google.search.SearchControl(); searchControl.setTimeoutInterval(google.search.SearchControl.TIMEOUT_MEDIUM); searchControl.setResultSetSize(google.search.Search.LARGE_RESULTSET); var options = new google.search.SearcherOptions(); options.setExpandMode(google.search.SearchControl.EXPAND_MODE_OPEN); var gVideoSearch = new google.search.VideoSearch(); searchControl.addSearcher(gVideoSearch,options); var drawOptions = new google.search.DrawOptions(); drawOptions.setInput(document.getElementById("kensaku_key")); searchControl.draw(document.getElementById("dummy"),drawOptions); searchControl.execute(); gVideoSearch.setResultSetSize(google.search.Search.LARGE_RESULTSET); gVideoSearch.setResultOrder(google.search.Search.ORDER_BY_DATE); gVideoSearch.setSearchCompleteCallback(null, function(){ $('#GoogleResult > dl,span').empty(); if(gVideoSearch.cursor.pages && gVideoSearch.cursor.pages.length > 0){ var nextguide=$(document.createElement("span")); for(var i=0;i<gVideoSearch.cursor.pages.length;i++){ var nexta =$(document.createElement("a")); nexta.attr({href:"javascript:void(0);"}); nexta.text((i+1)+"頁目"); nexta.bind("click", function(event){ event.preventDefault(); gVideoSearch.gotoPage($(this).text().substring(0,1)-1); }); nextguide.append(nexta); } nextguide.append($('<a href="'+gVideoSearch.cursor.moreResultsUrl+'" target="_blank">もっと検索</a>')); $('#GoogleResult').append(nextguide); } if(gVideoSearch.results && gVideoSearch.results.length > 0){ var result=$("<dl>"); for(var i=0;i<gVideoSearch.results.length;i++){ result.append('<dt style="clear: both;"><a href="' + gVideoSearch.results[i].url + '" target="_blank">' + gVideoSearch.results[i].title + '</a></dt>' + '<dd>' + '<img src="' + gVideoSearch.results[i].tbUrl + '" style="float:left" />' + '<div style="padding-left:130px;">' + gVideoSearch.results[i].content + '<br />' + 'VideoType:' + gVideoSearch.results[i].videoType + ' ' + gVideoSearch.results[i].tbWidth +'×'+gVideoSearch.results[i].tbHeight +'<br />' + 'Playurl:' + '<a rel="shadowbox;width=320;height=240;player=swf" '+ 'href="' + gVideoSearch.results[i].playUrl + '">' + gVideoSearch.results[i].playUrl + '</a><br />' + 'Published:' + gVideoSearch.results[i].published + ' By' + gVideoSearch.results[i].publisher +'<br />' + '</div>' + '</dd>'); } $('#GoogleResult').append(result); $('#GoogleResult > dl').css("margin-left","10px"); $('#GoogleResult > span > a').css({margin:"5px",color:"black",background:"#FFF"}); $('#GoogleResult > span > a:eq('+ gVideoSearch.cursor.currentPageIndex + ')').css("background","yellow"); $('#GoogleResult').append('<hr style="clear: both;">'); $('#GoogleResult').append(nextguide.clone(true)); // ShadowBox Setup and Play Shadowbox.clearCache(); Shadowbox.setup($("a[rel^='shadowbox']")); $("a[rel^='shadowbox']:first").click(); }else{ var result=$("<dl>無し</dl>"); $('#GoogleResult').append(result); return; } }); }); function set(key){ searchControl.execute(key); } //]]> </script> </head> <body> <div><h3>Google Video Search By Google AJAX Search API</h3> 検索キーワード:<input id="kensaku_key" type="text" size="50"> <hr style="clear:both;"/> <div id="GoogleResult">(検索結果)<br /> </div> </div> <div id="dummy" style="display:none"></div> </body> </html> さらに補足--- 「GSvideoSearchControl」 http://www.google.com/uds/solutions/videosearch/reference.html を使えば、自分でごちゃごちゃDOM操作しなくても、すんなり出来ます。

  • yyr446
  • ベストアンサー率65% (870/1330)
回答No.3

No2回答者です。 「Google AJAX Search API」のgoogle.search.VideoSearch http://code.google.com/intl/ja/apis/ajaxsearch/documentation/reference.html#_class_GvideoSearch を使って、「アニマル」を自動検索し、結果をJQUERYで成型して 最初にヒットした画像を自動再生するサンプルを作ってみました。 ご参考になればと.. ※prototype.jsやめてJQUERYにしました(個人的な好み) http://docs.jquery.com/Main_Page ※動画の再生には「prototype.js」+「lightwindow」 の組み合わせでなく「Shadowbox」を使いました。 http://www.shadowbox-js.com/index.html こっちの方が汎用性が高くコンフリクトしにくいです。 ※インクリメンタルサーチにはなっていません。 (サンプルURL) 参照サイト (サンプルソース) <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" lang="ja-JP"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> <meta http-equiv="Content-Script-Type" content="text/javascript"/> <meta http-equiv="Content-Style-Type" content="text/css"/> <meta http-equiv="Cache-Control" content="no-cache"/> <meta http-equiv="Expires" content="0" /> <title>Google Video Search for YouTube</title> <style type="text/css"></style> <script type="text/javascript" src="http://www.google.com/jsapi?key=ABQIAAAAG93o66s6C1e8nCJDkjmJ0xSVVYxLupw9AvipHbcBrNMoQN8XSBRA6NK6XyYISfT41Z7mY_whiu7HMg"></script> <script type="text/javascript"> google.load("search", "1"); </script> <link rel="stylesheet" type="text/css" href="/jslib/shadowbox/shadowbox.css"> <script type="text/javascript" charset="utf-8" src="/jslib/jquery-1.3.2.min.js"></script> <script type="text/javascript" src="/jslib/shadowbox/shadowbox.js"></script> <script type="text/javascript" charset="utf-8"> //<![CDATA[ Shadowbox.init({ language: 'ja', players: ['swf','flv'] }); //]]> </script> <script type="text/javascript" charset="utf-8"> //<![CDATA[ $(document).ready(function(){ var searchform = new google.search.SearchForm(true,document.getElementById("GoogleSearchForm")); searchform.input.value ="アニマル"; searchform.setOnSubmitCallback(null, function(searchform){ gVideoSearch.execute(searchform.input.value); return false; }); var gVideoSearch = new google.search.VideoSearch(); gVideoSearch.setResultSetSize(google.search.Search.LARGE_RESULTSET); gVideoSearch.setResultOrder(google.search.Search.ORDER_BY_DATE); gVideoSearch.setSearchCompleteCallback(null, function(){ $('#GoogleResult > dl,span').empty(); if(gVideoSearch.cursor.pages && gVideoSearch.cursor.pages.length > 0){ var nextguide=$(document.createElement("span")); for(var i=0;i<gVideoSearch.cursor.pages.length;i++){ var nexta =$(document.createElement("a")); nexta.attr({href:"javascript:void(0);"}); nexta.text((i+1)+"頁目"); nexta.bind("click", function(event){ event.preventDefault(); gVideoSearch.gotoPage($(this).text().substring(0,1)-1); }); nextguide.append(nexta); } nextguide.append($('<a href="'+gVideoSearch.cursor.moreResultsUrl+'" target="_blank">もっと検索</a>')); $('#GoogleResult').append(nextguide); } if(gVideoSearch.results && gVideoSearch.results.length > 0){ var result=$("<dl>"); for(var i=0;i<gVideoSearch.results.length;i++){ result.append('<dt style="clear: both;"><a href="' + gVideoSearch.results[i].url + '" target="_blank">' + gVideoSearch.results[i].title + '</a></dt>' + '<dd>' + '<img src="' + gVideoSearch.results[i].tbUrl + '" style="float:left" />' + '<div style="padding-left:130px;">' + gVideoSearch.results[i].content + '<br />' + 'VideoType:' + gVideoSearch.results[i].videoType + ' ' + gVideoSearch.results[i].tbWidth +'×'+gVideoSearch.results[i].tbHeight +'<br />' + 'Playurl:' + '<a rel="shadowbox;width=320;height=240;player=swf" '+ 'href="' + gVideoSearch.results[i].playUrl + '">' + gVideoSearch.results[i].playUrl + '</a><br />' + 'Published:' + gVideoSearch.results[i].published + ' By' + gVideoSearch.results[i].publisher +'<br />' + '</div>' + '</dd>'); } $('#GoogleResult').append(result); $('#GoogleResult > dl').css("margin-left","10px"); $('#GoogleResult > span > a').css({margin:"5px",color:"black",background:"#FFF"}); $('#GoogleResult > span > a:eq('+ gVideoSearch.cursor.currentPageIndex + ')').css("background","yellow"); $('#GoogleResult').append('<hr style="clear: both;">'); $('#GoogleResult').append(nextguide.clone(true)); // ShadowBox Setup and Play Shadowbox.clearCache(); Shadowbox.setup($("a[rel^='shadowbox']")); $("a[rel^='shadowbox']:first").click(); }else{ var result=$("<dl>無し</dl>"); $('#GoogleResult').append(result); return; } }); }); //]]> </script> </head> <body> <div><h3>Google Video Search By Google AJAX Search API</h3> <div id="GoogleSearchForm" style="width:30%;"></div> <hr style="clear:both;"/> <div id="GoogleResult">(検索結果)<br /> </div> </div> </body> </html>

  • DOUGLAS_
  • ベストアンサー率74% (397/534)
回答No.1

 お示しの「参考URL」を拝見すると、「MVCそれぞれの役割を確認」の図で「0.5秒が経過」すると「keyword」が変わったと判断する、というような記述があります。  従って、使用された8つの js ファイルの中から当該関数「○○○()」を見つけて、 window.onload = "document.getElementById('keyword').value='animal'; ○○○()"; とでも記述すればよさそうですが、その関数を見つけることはちょっと面倒です。  また、 >「keyword」が変わったと判断 させるためには、「animal」とは別の keyword を予め書き込む必要がありますが、その間のタイマー処理をすることも甚だ面倒ですし、そもそも、最初の keyword を書き込んでから「animal」を書き込むまでの間、自前関数の制御下に置かれたままになりますので、結果的に何も起こらないような気もいたします。  そこで、少々ダサいヤリカタですが、下記のようなことではいかがでしょうか? <input type='text' name='keyword' id='keyword' onClick="value='animal'; this.select()"/> >入力フォームにvalue="animal"として、検索ページが表示されると >自動でanimalの検索結果を表示させたい とのことですが、上記の場合は、空白のページが開き、検索窓をクリックしたタイミングで、検索窓に「animal」が記入され、動画が表示されます。  ただし、検索窓をクリックするたびに「animal」が記入され、動画が表示されますが...。

関連するQ&A

  • フォーム入力の自動切換え

    フォームをJavaScriptを使って自動的に切換える方法を探しています。 イメージ的にはYahoo!知恵袋の入力フォームみたいな感じです。 Yahoo!知恵袋の場合は 大カテゴリを選ぶと自動でそれに関連する中カテゴリが切り替わる 中カテゴリを選ぶとまた、自動で小カテゴリが切り替わる。 このようなJavaScriptを解説しているホームページやサンプルソースを紹介しているページなど知っていましたら教えてください。 よろしくお願いします。

  • 昔の検索フォームに戻せませんか?

    久しぶりにパソコンを開いたら、以前の検索フォームがなくなり非常に使いづらくなっていました。 以前は、yahooでも、googleでも、パソコンを開くとオープン画面が検索フォームで(画面左側に縦表示で検索フォームはありました) そこに検索したいキーワードを入れると(縦表示に)ズラ~っと検索結果が表示され、見たいものをクリックするとそのすぐ右側にクリックしたページが大きく表示されるというスタイルだったのに・・・ 今は、yahooでも、googleでも、検索フォームは画面の上部にあり(横長のフォーム)、検索ワードを入力すると、そのすぐ下に検索結果が表示され、それをクリックすると・・・別ウインドウは開かなくとも丸々1ページクリックしたページに切り替わるので、以前のように検索候補にあがったページを左画面に表示し、見たいページを右画面で見るということができなくなったので非常に不便です。他のページを見たいときも戻らないといけないし、、、 どうにかして、昔の様式に戻せないでしょうか? 画面左端に検索フォームをおき、候補にあがったサイトは検索フォームすぐ下に 縦表示で羅列され、見たいページがあればクリックして、それを右画面に大きく表示する ひとつのページに検索結果(左画面)と見たいページ(右画面)を並べたいんです。 パソコンはWINDOWS7です。

  • JavaScriptで「検索フォーム」作成について

    HP内にJavaScriptで「検索フォーム」を作成したいのですが、本やサイト等色々探してみても、その作り方がなかなか見つかりません。もし、詳しい方がいらっしゃれば教えて下さい。 具体的には質問追記欄に記載致します 例)CSSで作られたページに検索フォームを置き、検索された対象のページが新しいウィンドウに表示される。                           ▼フォーム▼   ▼検索ボタン▼ (1)検索フォーム初期状態     ⇒[ここに入力してください。] 「検索」 (2)検索フォームに「光」と入力。  ⇒[光              ] 「検索」 (3)"「検索」"ボタンをクリック。  ⇒[光              ] 「検索」 (4)新しいウィンドウ(name=jisyo)に 対象のページが表示される。

  • JavaScriptによる自動計算フォーム

    サンプルを読んだりは多少わかる範囲なのですが、カスタムの段階で詰まってしまいましたのでお知恵お貸し頂ければと思います。 積算の自動計算フォームを作成しようとしてるのですが、サンプルでよくあるものが固定数値×プルダウン=小計のようなものが多く、この固定数を入力フォーム、プルダウンも入力フォームに切り替えたいのですが、変更すると合計欄がNaNと表示されてしまいます。 何か指定が間違っているのでしょうか。 こちらのサイトを参考に作っています。 http://www.tagindex.com/javascript/form/comp1b.html 宜しくお願いします。

  • 様々なサイト上の検索フォームの検索履歴について

    webサイト上の検索的なフォーム入力にカーソルを当てると自動で検索履歴的なのが検索候補として表示されます。 たとえば小説家になろうのホームページの右上など https://syosetu.com/ この検索候補が当該ページで検索したものでなく違うサイトのフォームで入力したものだったりするようなのですが、 どのようにすればこれらの検索フォームの検索履歴を編集もしくは確認、削除などができるのでしょうか?

  • 別ページからフォームへ移動したときにプルダウンの指定のメニューを自動選

    別ページからフォームへ移動したときにプルダウンの指定のメニューを自動選択したいです! メニューページのAというメニューから予約フォームへリンクしたときにフォームのプルダウンを自動で Aメニューを選択した状態で表示したいのですが、どうしたら出来るのかわかりません。 Javascriptかphpでサンプルや参考になるページがありましたら教えてください。

  • javascriptでのフォーム自動入力について質問です。

    javascriptでのフォーム自動入力について質問です。 プログラム超初心者ですがよろしくお願いします。 ブックマークレットを使ってフォームの自動入力をしたいと思っているのですが、 まず、新規(別)のページから自動入力したいURLに移動して、読み込みが完了したら IDとPASWSWORDを自動入力したいと思っています。 自動入力したいURLを手動で表示してからだと以下のスクリプトでうまくいったのですが・・ javascript:(function (){document.forms[0].CRSRED.value='ID';document.forms[0].CRSBLU.value='PASSWORD';document.forms[0].submit();})(); スクリプトの中にURLを記述して自動でページ移動してから入力する方法がわかりませんでした。 良い方法がありましたら教えていただきたいです。よろしくお願いいたします。 移動したいページは下のページです。 https://contents.nifty.com/member/service/g-way/meijinsen_month/pay/index.html

  • Filemakerで検索フォームを作りたい

    Filemaker 11 Pro Advanced で、以下の様な機能を持つフォームを作成したいと思っております。 1.フォームがあり、そこに検索ボックスがある。 2.そこの検索ボックスで検索すると、データベースA上から該当するレコードを検索し、同フォーム上にリスト表示 3.そのあと、その検索結果のレコードをダブルクリックとかなんとかすると、そのレコードのいくつかの情報が、フォームに自動入力される。(このフォームに入力すると、データベースBに書き込まれるものとします) 4.さらに、入力者が追加情報をフォームに書き込んで終了。 Filemaker初心者なもので、1番から3番をどうやって実装するのかどうかがわかりません。 お手数ですがご教授お願いいたします。 また、Filemakerの入門レファレンスのWebや書籍があればそちらも教えていただければ幸いです。

  • HTML5で検索フォームを実装

    現在HTML5をサイトや本を見ながら勉強中なのですが、 検索窓に数値を入力し、入力された数字に割り当てられた 結果を表示する機能を持ったスマートフォンページを 作りたいと考えています。 例えば… (1)検索窓に25と入力して検索ボタンを押す (2)図鑑No.25のピカチュウが検索結果として表示される という具合です。 <input type="number">を使って簡単に数値の入力フォームが 作れることはわかったのですが、どのように数字と結果を 結びつければいいのかがわかりません。 どんなヒントでも構わないのでどなたかご教授いただけないでしょうか。 よろしくお願いします。

    • ベストアンサー
    • HTML
  • youtubeの検索の件

    最近、YouTubeの検索欄に入力したワードと、関係のない 動画が表示されます。 (YouTubeの検索欄に入力したワードと、関係のある 動画はヒットします) どうしてでしょうか? よろしくお願い致します。

専門家に質問してみよう