javascript重定向不起作用

javascript重定向不起作用,javascript,forms,Javascript,Forms,我有一个表单,它接受用户的输入并将窗口重定向到URL,并将用户的输入附加到末尾 这是我的HTML <form id="wikiForm"> <label id="sideBarLabel">VoIP Services <input type="text" placeholder="Search Wiki: e.g. E911" name="queryString" id="query-strin

我有一个表单,它接受用户的输入并将窗口重定向到URL,并将用户的输入附加到末尾

这是我的HTML

        <form id="wikiForm">
            <label id="sideBarLabel">VoIP Services
                <input type="text" placeholder="Search Wiki: e.g. E911" name="queryString" id="query-string" />
            </label>
            <input type="submit" value="Search" onclick="searchWiki();" />
        </form>

问题是它没有重定向。它仅将“siteQuery”变量附加到当前URL的末尾。我知道它在调用javascript,因为我看到了这两个警报。我不确定我做错了什么

你就不能用assign吗

window.location.assign("http://wiki.voipinnovations.com/dosearchsite.action?queryString=" + siteQuery);
签出:

使用默认的
操作
方法
属性 HTMLForm元素提供了一种机制来完成这项工作

<form id="wikiForm" action="http://wiki.voipinnovations.com/dosearchsite.action" method="GET">
    <label id="sideBarLabel">VoIP Services
        <input type="text" placeholder="Search Wiki: e.g. E911" name="queryString" id="query-string" />
    </label>
    <input type="submit" value="Search" />
</form>
致:

这是因为
location.href
是只读属性,而
location.assign()
是设置要加载的新位置的正确方法。您也可以直接将字符串指定给
位置
对象:

每当为location对象指定新值时,文档 将使用URL加载,就像调用了location.assign()一样 使用修改后的URL


来源:

问题是由于您实际提交了表单,并且在表单提交第一次时重定向丢失。有两种简单的方法可以解决此问题:

  • 将输入类型从
    提交
    更改为
    按钮
    ,或
  • 通过从函数返回false并将函数调用更改为
    onclick=“return searchWiki();”
  • (1)


    (2)

    原因在于您使用了
    type=“submit”
    ,它提交并向默认的
    操作
    参数(当前页面)发送一个GET头

    type=“submit”
    更改为
    type=“button”

    
    VoIP服务
    函数searchWiki(){
    警告(“表格工作!”);
    var siteQuery=$('#查询字符串').val();
    警报(siteQuery);
    window.location.assign(“http://wiki.voipinnovations.com/dosearchsite.action?queryString=“+siteQuery);
    警报(“第二条消息”);
    }
    
    我用
    type=“submit”
    尝试了该代码,它发出了警报,但没有重定向,因为提交在
    窗口之前被优先排序。位置发生了变化,这就是它只是在当前url中附加一个
    ?queryString=value
    的原因。
    如果您像上面代码中所示那样更改类型,它工作得很好。

    更改输入类型=提交到类型=按钮

    
    VoIP服务
    
    试过了。有相同的结果。控制台中是否有任何错误-看不出为什么不起作用这很好,但是你能告诉我为什么当你按下回车按钮时它不起作用吗?你的和我的一样。。。刷新页面。当我点击“搜索”时,它工作,但当我点击“回车”时,它不工作。所以你想点击“回车”键来触发重定向,还是不想?当一个表单只有一个文本输入时,按enter键时的默认行为是提交表单。没错,但奇怪的是,它没有为我这样做。我想按enter键触发重定向。但重定向只在我单击submit按钮时起作用。我不明白为什么会这样。因为无论哪种方式,为了运行JavaScript,您实际上都绕过了表单的提交事件。您可以将事件处理程序附加到输入框,以便在按键时检查是否按下了enter键,如果是,则运行相同的重定向代码。这很好。但您能解释一下,当您使用此表单在键盘上按enter键时,为什么我的表单未提交?它只在您实际单击按钮时起作用。当您按enter键时,它会将“queryString”附加到当前URL并刷新页面。因为您使用的是
    onclick
    -事件处理程序。您可以删除
    ,并在整个过程中使用javascript,因为您不是在为自己使用GET/POST,而是在为重定向url使用GET/POST。这将阻止它提交。然后,您可以在
    窗口
    或按钮上执行
    按键
    -事件并使用它。例子:
    <form id="wikiForm" action="http://wiki.voipinnovations.com/dosearchsite.action" method="GET">
        <label id="sideBarLabel">VoIP Services
            <input type="text" placeholder="Search Wiki: e.g. E911" name="queryString" id="query-string" />
        </label>
        <input type="submit" value="Search" />
    </form>
    
    window.location.href = "…";
    
    window.location.assign("…"); // or
    window.location = "…"
    
    <form id="wikiForm">
        <label id="sideBarLabel">VoIP Services
            <input type="text" placeholder="Search Wiki: e.g. E911" name="queryString" id="query-string" />
        </label>
        <input type="button" value="Search" onclick="searchWiki();" />
    </form>
    <script type="text/javascript" src="https://code.jquery.com/jquery-2.1.4.min.js"></script>
    <script>
        function searchWiki() {
            alert("Form Works!");
            var siteQuery = $('#query-string').val();
            alert(siteQuery);
            window.location.assign("http://wiki.voipinnovations.com/dosearchsite.action?queryString=" + siteQuery);
            alert("SECOND MESSAGE");
        }
    </script>
    
    <form id="wikiForm">
        <label id="sideBarLabel">VoIP Services
        <input type="text" placeholder="Search Wiki: e.g. E911" name="queryString" id="query-string" />
        </label>
        <input type="button" value="Search" onclick="searchWiki();" />
    </form>