窗口位置.href无法工作

17

我的网站是http://www.collegeanswerz.com/。我正在使用Rails编写代码,用于搜索大学。我希望用户能够输入大学名称、点击Enter键并跳转到相应的URL,而不是看到搜索结果(如果用户正确地输入了名称,否则我希望显示搜索结果)。在尝试使其工作时,我使用“a”和“stackoverflow.com”作为占位符。

我根据这个链接:如何在JavaScript/jQuery中重定向到另一个网页?使用window.location.href进行操作。

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。为什么会这样?

我看到我的回答被踩了。你能告诉我为什么吗?我一开始并没有发现这个问题有什么不对。 - Adam Zerner
2
我没有对这个问题进行负面评价,但至少你应该展示表单的HTML代码。 - T.J. Crowder
当然,我会编辑这个问题。 - Adam Zerner
可能是重复的问题:window.location()不起作用,无法打开页面 - JJJ
1
显示生成的 HTML,而不是 Ruby 代码。 - JJJ
是的,@Juhana,你说得对。 - Adam Zerner
4个回答

46

当您的代码运行后,浏览器仍会提交表单。

向处理程序添加return false;以防止这种情况发生。


谢谢,你说得对,它起作用了。这个问题也在这里解决了(https://dev59.com/Hm025IYBdhLWcg3wSkAq)。在我提问之前我没有意识到这一点。 - Adam Zerner
1
你刚刚救了我的命。 - TheGrimmScientist
1
但是如果我返回false,提交函数就没有用了。 - Summer Sun

2
尝试这个。
`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"。

我可以知道为什么我被投了反对票吗?@Adam Zerner - Arihant Godha
2
你在得到那些负评之后很久才添加了正确答案(返回false)。 - JJJ
1
@Juhana 正在编辑我的回答,期间收到了这些负评。但是,在进行投票之前添加评论难道不是有意义的吗?由于这些负评,我现在会考虑是否回答任何问题。 - Arihant Godha
2
如果它让你在回答之前思考...任务完成。 - JJJ
2
@ArihantGodha:回答错误或不好的问题会被投票降低。稍后编辑以表达另一个答案已经说过的内容(无论是有意还是无意),都不能改变这一点。当你编辑你的答案使其成为另一个答案的副本时,请将其删除。 - T.J. Crowder
这段代码对我有用:var url = "http://stackoverflow.com"; $(location).attr('href',url); 谢谢,伙计。 - Raju S Nair

1
请检查是否不小心使用了反斜杠\\,应该使用双斜杠//,如下所示。
Wrong:"http:\\stackoverflow.com"

Right:"http://stackoverflow.com"

1

如果有人即使使用了return false;仍然遇到问题,请使用以下方法。

setTimeout(function(){document.location.href = "index.php"},500);

你的答案对我不起作用。 - Ganesan J
它对我有效。问题出在你这边 @GanesanJ - Malek Tubaisaht

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接