通过JavaScript打开url,重定向到?results=aaa而不是结果?q=aaa

通过JavaScript打开url,重定向到?results=aaa而不是结果?q=aaa,javascript,html,Javascript,Html,我有个问题。我尝试直接从我的网站使用外部搜索引擎,但JavaScript似乎会自动更改我的URL,我不知道为什么 以下是我的JavaScript代码: var form = document.querySelector('#my-form'), text_field = document.querySelector('#results'); function submitHandler(){ window.open('https://myurl.com/results?

我有个问题。我尝试直接从我的网站使用外部搜索引擎,但JavaScript似乎会自动更改我的URL,我不知道为什么

以下是我的JavaScript代码:

  var form = document.querySelector('#my-form'),
  text_field = document.querySelector('#results');

  function submitHandler(){
      window.open('https://myurl.com/results?q=' + text_field.value);
      win.focus();
  }

  // attach custom submit handler
  form.onsubmit = submitHandler;
这是我的html表单代码:

<form method="get" id="my-form">
<input type="text" name="results" id="results" value="" placeholder="Search...">
</form>

为什么此代码重定向到
https://myurl.com/?results=aaa
而不是
https://myurl.com/results?q=aaa

您需要防止默认提交行为:

function submitHandler(e){
  e.preventDefault();
  window.open('https://myurl.com/results?q=' + text_field.value);
  win.focus();
}
提交处理程序将被传递一个事件对象。在这种情况下,
e
。调用方法
preventDefault
将阻止默认行为并提供所需的结果

这是一把小提琴:
您需要防止默认提交行为:

function submitHandler(e){
  e.preventDefault();
  window.open('https://myurl.com/results?q=' + text_field.value);
  win.focus();
}
提交处理程序将被传递一个事件对象。在这种情况下,
e
。调用方法
preventDefault
将阻止默认行为并提供所需的结果

这是一把小提琴:

如果下一行是
win.focus()
,您不应该打开(…)?那么,这个答案究竟是如何解决问题的呢?也许OP想要提交并打开一个新窗口?@MrBlue这不是正确的答案。您的原始代码按原样工作。请参见此处未更改的原始代码:提交的表单与您的
window.open()语句没有关系。只需取出
e.preventDefault()
即可。仍然像它应该的那样工作,就像它与OP的原始代码一样
window.open()
是一个与提交表单完全不同的操作。可以肯定的是,在现实世界的情况下,您仍然希望使用“阻止默认值”。在现实世界的情况下,这将是一个AJAX调用。没有要提交的表单,也没有要阻止的提交事件。然而,表单与新窗口无关。OP在与代码指定的URL不同的URL上结束时遇到的任何问题都必须归因于服务器端重定向。您不应该有
var win=window。如果下一行是
win.focus()
,请打开(…)
?那么,这个答案究竟是如何解决问题的呢?也许OP想要提交并打开一个新窗口?@MrBlue这不是正确的答案。您的原始代码按原样工作。请参见此处未更改的原始代码:提交的表单与您的
window.open()语句没有关系。只需取出
e.preventDefault()
即可。仍然像它应该的那样工作,就像它与OP的原始代码一样
window.open()
是一个与提交表单完全不同的操作。可以肯定的是,在现实世界的情况下,您仍然希望使用“阻止默认值”。在现实世界的情况下,这将是一个AJAX调用。没有要提交的表单,也没有要阻止的提交事件。然而,表单与新窗口无关。OP在与代码指定的URL不同的URL上遇到的任何问题都是由于服务器端重定向造成的。听起来像是路由的服务器端问题,而不是客户端问题。此外,如果要通过变量
win
使用新窗口,则需要使用
var win=window.open(…)
声明并分配它。最后,您首先不需要
win.focus()
,除非有关当前窗口或表单重定向页面的某些内容正在吸引焦点。投票将此问题作为非主题关闭,因为发布的代码按预期工作,并且问题无法重现。OP很可能正在经历某种服务器端重定向。感谢Scott的解释。这真的很有用!听起来像是路由的服务器端问题,而不是客户端问题。此外,如果要通过变量
win
使用新窗口,则需要使用
var win=window.open(…)
声明并分配它。最后,您首先不需要
win.focus()
,除非有关当前窗口或表单重定向页面的某些内容正在吸引焦点。投票将此问题作为非主题关闭,因为发布的代码按预期工作,并且问题无法重现。OP很可能正在经历某种服务器端重定向。感谢Scott的解释。这真的很有用!