【问题标题】:How can I change the target of a form from javascript?如何从 javascript 更改表单的目标?
【发布时间】:2020-05-08 15:46:28
【问题描述】:

所以我试图更改表单的目标以打开一个新窗口。这种形式的任何类型的重定向都使用相同的窗口,但只有一个。后者是一个调用自定义 javascript 函数的按钮,该函数必须将目标从默认设置的“_self”更改为“_blank”,这显然可以完成我想要的工作。

这是我的表单标签

<html:form action="<%=nomeAction%>" target="_self">
...
    <html:button styleClass="button" property="button" 
    onclick="javascript:redirectOnAnewWindow('mostraConguagli770')">
        <bean:message key="button.mostraConguagli770"/>
    </html:button>
</form>

这就是js函数

function redirectOnAnewWindow(event) {
    document.forms[0].action=document.forms[0].action+"?event="+evento;
    //document.forms[0].setAttribute("target", "_blank");
    document.forms[0].target = "_blank";
    document.forms[0].submit();
}

我已经尝试了评论的一种和未评论的一种,但它们都没有奏效。 所以我不确定有什么问题,但是手动更改表单的目标,并将值固定为“_blank”工作得很好,唯一的问题是我需要它来更改目标只有当那个按钮被按下时。

有没有办法做到这一点?因为我查了一下,但找不到任何解决我问题的方法

【问题讨论】:

  • 大多数浏览器允许用户通过设置来控制新窗口和标签页的打开。

标签: javascript html forms


【解决方案1】:

下面的 html 代码运行良好。您可以参考它并相应地更改您的代码。

  • 如果您点击Click Me,然后点击Submit,目标将是'_self',因为正在调用函数changeFormTarget,并且表单将在同一个选项卡中提交。
  • 如果您点击Submit 而不点击Click Me,目标将是'_blank',并且表单将在新选项卡中提交。
<html>
    <form action="/somaction" target="_blank">
        <button onclick="changeFormTarget(this)" type="button"> Click Me </button>
        <button type="submit">Submit</button>
    </form>
    <script>
        function changeFormTarget(el) {
            console.log(el.form.target)
            el.form.setAttribute('target', '_self')
            console.log(el.form.target)
        }
    </script>
</html>

【讨论】:

    【解决方案2】:

    我认为您的问题来自您的 html in tag,因为没有此功能也可以正常工作。

    见:

    我做了一个 jsfiddle:https://jsfiddle.net/4puxr6e3/

    html

    <form action="blabla.html" target="_self">
        <button class="button" onclick="javascript:redirectOnAnewWindow('mostraConguagli770')">
        Redirect
        </button>
    </form>
    

    javascript

    function redirectOnAnewWindow(event) {
        document.forms[0].action="blibli.html";
        document.forms[0].target = "_blank";
        document.forms[0].submit();
    }
    

    【讨论】:

    • 非常感谢,看来问题在于表单之前的 html 标记。不幸的是,对遗留代码进行维护并不是你能做的最好的事情......谢谢
    猜你喜欢
    • 2018-02-22
    • 2012-01-07
    • 1970-01-01
    • 2018-03-08
    • 1970-01-01
    • 2013-11-16
    • 2012-05-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多