【发布时间】:2017-11-15 14:03:22
【问题描述】:
我有以下几点:
<form id="form" action="xxx" method="get">
<input type="checkbox" name="cb">
<button onclick="update();">Update</button>
</form>
<script>
function update() {
var data = $("#form").serialize();
$.ajax( {
url: "/api/m/x",
type: "post",
data: data
}
).done(function(results,status) {
alert(status);
}).fail(function(error, status) {
alert(status);
});
}
</script>
当我单击“更新”按钮时,Ajax 调用被发送到 /api/m/x 并触发了其中一个警报。到目前为止,一切都很好。但是,在我关闭警报对话框后,表单已提交!浏览器发送到xxx?cb=on,例如,如果我勾选了复选框。
为什么会这样?我的表单没有 <input type='submit'> 元素。谁触发了表单的提交?
我尝试将return false; 添加到update 函数,但行为仍然相同。
【问题讨论】:
-
你的成功在哪里
-
那是
done对吧? -
因为你没有做任何事情来阻止它被提交
-
试试
-
你有使用内联处理程序的原因吗?此外,您需要将处理程序视为
function(){update()}的等效项,这应该会告诉您为什么update函数中的return false;不起作用。