私のウェブサイトは http://www.collegeanswerz.com/ です。 Railsを使用しています。コードは大学を検索するためのものです。検索結果を表示するのではなく、ユーザーが大学名を入力してEnterキーを押し、URLに移動できるようにしたい(ユーザーが名前を正しく入力した場合。検索結果を表示したくない場合) 。プレースホルダーとして「a」と「stackoverflow.com」を使用していますが、機能させようとしています。
私はこれに基づいてwindow.location.hrefを使用しています: JavaScript/jQueryで別のWebページにリダイレクトする方法?
javascript
$("#search_text").submit(function() {
if ($("#search_field").val() == "a")
{
window.location.href = "http://stackoverflow.com";
alert('worked');
}
});
レイアウトファイル
<%= form_tag("/search", :method => 'get', :id => 'search_text', :class => 'form_search') do -%>
<div id="search"> <%= search_field_tag :search, params[:search], :placeholder => 'enter college', :id => "search_field", :class => 'input-medium search-query' %></div>
<% end -%>
static_pages_controller.rb
def search
@colleges = College.search(params[:search])
end
アラートが機能しているため、ifステートメント内の処理を実行する必要があることがわかります。しかし、stackoverflow.comではなく通常の検索結果に移動します。どうしてこれなの?
コードの実行後、ブラウザはまだフォームを送信しています。
それを防ぐには、return false;
をハンドラーに追加します。
これを試して
`var url = "http://stackoverflow.com";
$(location).attr('href',url);`
または、あなたはこのようなことをすることができます
// similar behavior as an HTTP redirect
window.location.replace("http://stackoverflow.com");
// similar behavior as clicking on a link
window.location.href = "http://stackoverflow.com";
関数呼び出しの最後にreturn falseを追加します
以下のように//
ではなく\\
by-mistakeを使用していることを確認してください
Wrong:"http:\\stackoverflow.com"
Right:"http://stackoverflow.com"
HTML5にはhistory.pushState()およびhistory.replaceState()メソッドが導入され、それぞれ履歴エントリを追加および変更できます。そして、私が知っているように、次のコードのようにpushState関数を使用して問題を解決できます。
history.pushState(null、null、 " http://stackoverflow.com ")この種の問題を処理するためのHTML5の新機能に関する詳細情報が利用可能です here 。