如何使用<a href=“…”>标记提交POST表单?


78

如何showMessage.jsp仅使用<a href="...">标签提交POST表单?

<form action="showMessage.jsp" method="post">
    <a href="showMessage.jsp"><%=n%></a>
    <input type="hidden" name="mess" value=<%=n%>/>
</form>

Answers:


91

如果使用按钮代替,则不需要JavaScript:

<form action="your_url" method="post">
    <button type="submit" name="your_name" value="your_value" class="btn-link">Go</button>
</form>

您可以将按钮样式设置为看起来像链接,例如:

.btn-link {
    border: none;
    outline: none;
    background: none;
    cursor: pointer;
    color: #0000EE;
    padding: 0;
    text-decoration: underline;
    font-family: inherit;
    font-size: inherit;
}

9
因为您的“方法”不使用a标签。
Winfield Trail

4
一切都很好,但是您仍然选择回答不同于询问的问题。鉴于可擦除墨水实际上是一种工业规模生产的可行产品……
Winfield Trail

2
FWIW,我很同情您的答案,这是我个人希望在必须维护的Web应用程序中看到的内容。我只是在解释不赞成投票-顺便说一句,我没有离开。;)
Winfield Trail

@ rybo111您可能不想使用的原因button:IE在您使用时会强制3D“按”效果button,这很容易避免a。如果您display: inline-table使用设置按钮样式,则使用a以避免这种效果的唯一方法是,因为的常规解决方法position: relative不起作用。
2016年

不过,这是可以避免的不使用按钮提交的借口。
vintproykt '19

42

您需要为此使用javascript。

<form id="form1" action="showMessage.jsp" method="post">
    <a href="javascript:;" onclick="document.getElementById('form1').submit();"><%=n%></a>
    <input type="hidden" name="mess" value=<%=n%>/>
</form>

40

您必须submitform对象上使用Javascript函数。看一下其他功能

<form action="showMessage.jsp" method="post">
    <a href="javascript:;" onclick="parentNode.submit();"><%=n%></a>
    <input type="hidden" name="mess" value=<%=n%>/>
</form>

7
表单元素不一定必须始终是定位标记的parentNode。
2014年

4

如果您使用MVC来完成它-您将必须执行以下操作

 <form action="/ControllerName/ActionName" method="post">
        <a href="javascript:;" onclick="parentNode.submit();"><%=n%></a>
        <input type="hidden" name="mess" value=<%=n%>/>
    </form>

我只是在这里浏览了一些示例,却没有看到MVC认为发布它不会受到伤害。

然后,在控制器中的“动作”上,将其置于<HTTPPost>最上方。我相信,如果没有<HTTPGET>它,它仍然可以正常工作,但是明确地将其放在那里会感觉更安全。


1

确实似乎没有办法欺骗<a href= ..POST方法。但是,假设您有权访问页面的CSS,则可以使用表单代替它。

不幸的是,仅将CSS中的按钮样式设置为锚标记的明显方法与跨浏览器不兼容,因为不同的浏览器对待方法<button value= ...有所不同。

Incorrect:

<form action='actbusy.php' method='post'>
  <button type='submit' name='parameter' value='One'>Two</button>
</form>

上面的示例将在FireFox中显示“二”并传输“ parameter:One”,而在IE8中将显示“一”并传输“ parameter:One”。

解决方法是使用隐藏的输入字段来传递数据,并使用按钮来提交数据。

<form action='actbusy.php' method='post'>
   <input class=hidden name='parameter' value='blaah'>
   <button type='submit' name='delete' value='Delete'>Delete</button>
</form>

请注意,此方法有一个副作用,除了“ parameter:blaah”之外,它还会在POST中提供“ delete:Delete”作为多余参数。

您想要为按钮保留标签之间的value属性和按钮标签都相同(在这种情况下为“删除”),因为(如上所述)某些浏览器将显示一个,而另一些浏览器将另一个显示为按钮标签。


您确定IE8会这样做吗?刚刚<button value="Bad">Good</button>在IE7中尝试过,它显示“良好”。
rybo111 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.