通过JavaScript打开url,重定向到?results=aaa而不是结果?q=aaa
我有个问题。我尝试直接从我的网站使用外部搜索引擎,但JavaScript似乎会自动更改我的URL,我不知道为什么 以下是我的JavaScript代码:通过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?
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的解释。这真的很有用!