【问题标题】:Redirecting to a new URL using javascript使用 javascript 重定向到新的 URL
【发布时间】:2013-02-12 17:39:34
【问题描述】:

我正在尝试根据用户从下拉列表中选择的内容将我的页面重定向到不同的 url。如果用户选择“A”,则 url 是表单的 action 属性中的默认 URL,但如果用户选择“B”,我想将其重定向到不同的 url。

我的问题是无论我做什么,即使我从下拉列表中选择“B”,它也总是重定向到默认 URL(即 oldUrl.do)。

如何将其指向 newUrl.do?

注意:我正在使用 Struts 1.2 并在 IE8 上对其进行测试。

我的 jsp 页面:

<form name="myForm" method="post" action="oldUrl.do" id="myForm">

    <select name="modeOfT" id="choice"><option value="A">A</option>
        <option value="A">A</option>
        <option value="B">B</option>
    </select> 

    <input type="submit" name="submitBtn" onclick="submitForm()">
</form>

Javascript 函数:

function submitForm(){
    var form = document.getElementById("myForm");
    var mode = document.getElementById("choice");
    if(mode.value == "B"){
        $(form).attr("action", "newUrl.do");
    }
} 

以下是我尝试过的其他方法,但它们仍将我带到“oldUrl.do”:

  1. document.location.href("newUrl.do");

  2. window.location.href="newUrl.do";

  3. top.location.href="newUrl.do";

  4. parent.location.href="newUrl.do";

  5. window.location.replace("newUrl.do");

  6. window.location="newUrl.do";

【问题讨论】:

  • 你试过 window.location = "your URL";
  • 是的,我有。谢谢你。我会把它添加到我的列表中。
  • 您的代码似乎可以正常工作jsfiddle.net/xv3Uf/5(我仍然建议在我的回答中使用提交处理程序)
  • @javaStudent 请就我们告诉您的内容提供一些反馈。我很想知道什么不起作用...

标签: java javascript jsp redirect struts


【解决方案1】:

您不应该处理点击事件。要处理提交的表单,您应该使用 submit 事件,出于这个和许多其他原因(人们可以使用 enter,他们可以在关注提交按钮时点击空格)

工作示例 http://jsfiddle.net/xv3Uf/2/

HTML

<form name="myForm" method="post" action="oldUrl.do" id="myForm" onsubmit="return submitForm()" >

JS

function submitForm(){
    var form = document.getElementById("myForm");
    var mode = document.getElementById("choice");
    if(mode.value == "B"){
        form.action = "newUrl.do";
    }
} 

既然您已经在使用jQuery,为什么不喝下kool-aid 并停止在HTML 中设置JS 处理程序的启蒙前实践呢? http://jsfiddle.net/xv3Uf/3/

<form name="myForm" method="post" action="oldUrl.do" id="myForm">

JS

$('#myForm').submit(function(e){
    if ( $('#choice').val() === 'B') {
        this.action = 'newUrl.do'
    }
});

【讨论】:

  • 感谢您的回答。我尝试了你的第一种方法,它似乎在 FF 中工作,但是当我调试它时在 IE8 中给我以下错误“错误消息:对象不支持此属性或方法。行:804”。第 804 行是 stmt:form.action = "newUrl.do";
  • @javaStudent 看看这个stackoverflow.com/questions/266794/… 这是说类似的问题可能来自于 IE 自动从 ids 创建全局变量的事实。此外,当您不显示您尝试的实际代码时,很难提供帮助。我还建议您从表单中删除名称(在我链接到的答案中建议)。
  • @javaStudent 你也可以试试form.setAttribute('action', 'newUrl.do')stackoverflow.com/questions/12243428/…
  • 我尝试了 setAttribute()。现在它不会像以前在 IE 中给出任何错误,但它仍然以相同的 url 结束。与 FF 一起工作正常。谢谢。
  • 如果 only 在 IE 中不起作用,请不要担心。它的存在只是为了让你头疼;)
【解决方案2】:

你可以:

  1. 让服务器根据用户在表单中选择的内容发回 HTTP/重定向标头。

  2. 如果您希望在浏览器上处理重定向,请使用“onsubmit”属性,并返回false 值。您可以使用 window.location = &lt;URL&gt;;

    在此函数中处理重定向
    <form onsubmit="return myJSFunc()" .. >
       ...
       <input type="submit">
    </form>
    

【讨论】:

  • 这行得通。我使用了 window.location='newUrl.do';然后返回假;返回 false 是关键。你能告诉我为什么这有效吗?我尝试了@Juan 的建议,它适用于 FF,但不适用于 IE。
  • @javaStudent 因为,它阻止了在这种情况下提交表单的默认操作。
  • @javaStudent 如果您的问题得到解决,请“接受”解决您问题的答案。
【解决方案3】:

&lt;submit&gt; 变成普通的&lt;button&gt;

在 submitForm() 函数中,最后调用:

document.forms["myForm"].submit();

【讨论】:

  • 将其设为按钮有何不同?没有type="button" 的按钮的行为与提交按钮完全相同
  • 调用form.submit() 是不了解发生了什么的一种解决方法。单击按钮时,表单已经在提交过程中。这段代码的目的是撤销提交按钮给你的东西并自己实现它。 onsubmit 处理程序是 正确 的地方,只需修改表单的 action 即可完成
  • @JuanMendes 给出的代码示例只是修改了一个表单域(意图提交)。它不是否决提交。您正在推断不存在的要求。如果 OP 打算否决提交,那么是的,你是正确的。但这不是所说的。
  • 否决提交并不是使用提交事件的唯一原因。它是最有意义的,因为它是最语义化的,它是在提交表单时触发的,无论它是如何提交的(并不总是点击)
  • @RickGrashel 我试过了。它适用于FF,但不适用于IE。在 IE 中,它仍然重定向到相同的 url,即“oldUrl.do”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-06
  • 1970-01-01
  • 1970-01-01
  • 2021-05-18
相关资源
最近更新 更多