我有很多表格,如页面上的以下内容。现在我想根据用户点击的提交按钮(当然还有提交表单)来更改表单操作
<form action="/shop/products.php" data-ajax="false" method="post">
<div data-role="fieldcontain">
<input name="submit" class="obutn" type="submit" value="Order" />
<input name="submit" class="oEbutn" type="submit" value="Extras" />
</div>
</form>
我试过
$(".obtn").click(function() {
$(this).parent().parent().attr("action", "/shop/products.php");
});
$(".oEbtn").click(function() {
$(this).parent().parent().attr("action", "/shop/extras.php");
});
但表单总是提交到products.php。你能告诉我什么是错的吗?
答案 0 :(得分:5)
有两个拼写错误:
obtn
代替obutn
oEbtn
代替oEbutn
另一个建议是使用closest("form")
来获取包含所点击按钮的表单。
$(".obutn").click(function() {
$(this).closest("form").attr("action", "/shop/products.php");
});
$(".oEbutn").click(function() {
$(this).closest("form").attr("action", "/shop/extras.php");
});
$("form").on("submit", function () {
alert($(this).attr("action"));
});
答案 1 :(得分:4)
不要在表单上设置action
属性,而应考虑在每个formaction
元素上设置input
属性。
文档:http://www.w3.org/TR/html-markup/input.submit.html#input.submit.attrs.formaction
<form data-ajax="false" method="post">
<div data-role="fieldcontain">
<input formaction="/shop/products.php"
name="submit" class="obutn" type="submit" value="Order" />
<input formaction="/shop/extras.php"
name="submit" class="oEbutn" type="submit" value="Extras" />
</div>
</form>
答案 2 :(得分:2)
捕获提交事件并确定单击了哪个按钮。从那里,您可以更改表单的操作。
这是关于如何做到这一点的链接。
How can I get the button that caused the submit from the form submit event?
答案 3 :(得分:0)
另外,在点击发生之前不要给表单提供动作,这是多余的。
<form data-ajax="false" method="post">
<div data-role="fieldcontain">
<input name="submit" class="obutn" type="submit" value="Order" />
<input name="submit" class="oEbutn" type="submit" value="Extras" />
</div>
</form>
答案 4 :(得分:0)
如果用开关试一试怎么办?类似的东西:
<input name="submit" id = "1" class="obutn" type="submit" value="Order" />
<input name="submit" id = "2" class="oEbutn" type="submit" value="Extras" />
然后在JavaScript中我们有:
//param: The Id attr of the button that was clicked
function postTo(id){
switch(id){
case 1: postProducts();
break;
case 2: postExtras();
break;
default: //Do something else
}
}
只是一个想法。还没有测试过,但也许它可能会有所帮助。我希望如此。