0
<form id="formReg" action="reg.php" method="post">
. . . 
<button id="sub">Register</button>
</form>

这可行,但我想将按钮#sub放在表单标记之外,并使用 jquery 运行表单处理:

$("#sub").click( function() {
    $.post( $("#formReg").attr("action")),
    $("#formReg :input").serializeArray();      
});

它不起作用。有可能吗?

4

4 回答 4

1

你为什么不把按钮放在外面(如你所说)并调用这个:

$("#formReg").submit();

顺便说一句:你应该用它来绑定事件

$("#sub").on("click", function(){
... your code ...
});
于 2013-01-12T17:44:22.243 回答
1

好吧,它可能不起作用,因为表单提交取消了对任何进一步事件侦听器的调用。您应该像这样进行表单处理:

$("#formReg").on('submit', function() {
    // process form
    // You can even stop the form submission here,
    // just return 'false' and it will stop.
    // That's very useful for form validation etc.
});

如果您需要该按钮来提交表单,您可以这样做:

$("#sub").on('click', function() {
    $("#sub").submit(); // This will submit the form AND call the event listener. Nice, eh?
});

无论按钮在页面上的哪个位置,这都应该有效。

编辑:
谢谢,fiberFoX,让我想起了.click()and的弃用.submit()

编辑2:
穆萨是对的,你用$.post()错了。但我不知道如果用户被表单提交抛出页面,AJAX 请求是否真的完成。如果您不希望用户转到表单提交到的页面,您应该从提交侦听器返回 false。

于 2013-01-12T17:45:08.563 回答
1

如果您尝试通过 ajax 发布表单,则您使用$.post错误

$("#sub").click( function() {
    $.post($("#formReg").attr("action"), $("#formReg").serialize());    
});
于 2013-01-12T17:45:11.013 回答
1

试试这个

$("#sub").click( function() {
    $.post( $("#formReg").attr("action"), $("#formReg").serialize());
});

请注意,我在 serialize 方法之后删除了分号,并在表单元素上调用 serialize()。这是如果您想使用 Ajax 来实现的。

如果您只想提交表单,请使用此

$("#sub").click( function() {
    $("#formReg").submit();      
});
于 2013-01-12T17:45:39.383 回答