web-dev-qa-db-fra.com

window.location.href ne fonctionne pas

Mon site web est http://www.collegeanswerz.com/ . J'utilise Rails. Le code est pour la recherche de collèges. Je souhaite que l'utilisateur puisse taper le nom du collège, cliquer sur entrer et accéder à l'URL plutôt que d'afficher les résultats de la recherche (si l'utilisateur saisit le nom correctement. Sinon, je souhaite afficher les résultats de la recherche) . J'utilise "a" et "stackoverflow.com" comme espaces réservés pendant que j'essaie de le faire fonctionner.

J'utilise window.location.href basé sur ceci: Comment rediriger vers une autre page Web en JavaScript/jQuery?

javascript

$("#search_text").submit(function() {
    if ($("#search_field").val() == "a")
    {
        window.location.href = "http://stackoverflow.com";
        alert('worked');
    }
});

fichier de mise en page

<%= 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

L'alerte fonctionne, ce qui m'indique que les éléments de l'instruction if doivent être exécutés. Mais cela me conduit aux résultats de recherche normaux au lieu de stackoverflow.com. Pourquoi est-ce?

14
Adam Zerner

Le navigateur est toujours en train de soumettre le formulaire après l'exécution de votre code.

Ajoutez return false; au gestionnaire pour éviter cela.

37
SLaks

Essaye ça 

`var url = "http://stackoverflow.com";    
$(location).attr('href',url);`

Ou tu peux faire quelque chose comme ça 

// 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";

et ajouter un retour false à la fin de votre appel de fonction

2
Arihant Godha

Veuillez vérifier que vous utilisez // pas \\ par erreur, comme ci-dessous

Wrong:"http:\\stackoverflow.com"

Right:"http://stackoverflow.com"
1
Moumit

HTML5 a introduit les méthodes history.pushState () et history.replaceState (), qui vous permettent d'ajouter et de modifier des entrées d'historique, respectivement. Et comme je le sais, vous pouvez utiliser la fonction pushState comme le code suivant pour résoudre votre problème.

history.pushState (null, null, " http://stackoverflow.com ") Plus d'informations sur les nouvelles fonctionnalités de HTML5 permettant de gérer ce type de problème sont disponibles ici .

0
Mostafa Ghadimi