Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/473.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jQuery不阻止表单提交_Javascript_Jquery_Forms - Fatal编程技术网

Javascript jQuery不阻止表单提交

Javascript jQuery不阻止表单提交,javascript,jquery,forms,Javascript,Jquery,Forms,我想防止使用jQuery提交表单,而是在用户想要提交表单时运行函数 以下是我的表单标记: <form action="" method="post" id="msg-form"> <p><textarea name="msg"></textarea><input type="submit" value="Send"></p> </form> 但是,当我按下submit按钮时,表单仍然会被发送,页面也会刷

我想防止使用jQuery提交表单,而是在用户想要提交表单时运行函数

以下是我的表单标记:

<form action="" method="post" id="msg-form">
    <p><textarea name="msg"></textarea><input type="submit" value="Send"></p>
</form>
但是,当我按下submit按钮时,表单仍然会被发送,页面也会刷新。如何正确阻止表单提交?

$('#msg form')。提交(函数(e){
e、 预防默认值();

});

您无法为用户提供真正的提交按钮,只能在验证后使用JS提交表单:

HTML

<form action="" method="post" id="msg-form">
    <p><textarea name="msg"></textarea><input id="submit" type="button" value="Send"></p>
</form>
尝试:


submit
事件实际上没有绑定到表单元素。您可能忘记了在加载DOM后绑定它

将事件绑定放在
$(document).ready(function(){
的内部,或者在页面底部加载脚本(在加载所有元素之后)。

这样做有效

<form action='' onsubmit="return false;">

就像这样

<form action='' onsubmit="doSomeWork();return false;">

似乎事件处理程序甚至没有执行,因此我假设找不到该表单。请尝试将您的代码封装在DOM就绪时执行的处理程序中。在jQuery中,可以这样做:

$(function(){
    $('#msg-form').submit(function(event) {
        event.preventDefault();
        // code executed when user tries to submit the form
    });
});

此外,正如您在上面所看到的,您可以防止表单在提交时出现默认行为。

您在最后缺少了一个
。我假设您的真实代码中不是这样的?另外,如果您发出
警报(“表单已提交!”)
在您的提交回调中,它是否被调用过?抱歉,我在处理帖子格式时一定把它搞砸了。我的真实代码没有语法错误,如果我用一个警报测试它,我永远看不到警报,页面就会被刷新。您可能需要分享更多的代码,而不仅仅是这个,因为de不应该提交表单。你做得很好。你确定测试正确吗?确保调用了你的代码(这意味着提交回调确实已注册),并且它确实选择了正确的表单(
$('#msg form')。长度==1
)这不是真正的问题。这可能不是他的方法的解决方案,但它是我知道的同一个问题的替代方法。@anstosa:在这种特定情况下,它可能也不起作用。告诉你为什么我知道?因为如果你把它放在
中,而不传递脚本作为
ondomready
的处理程序来执行ode>onload
,它将找不到
#submit
,因为代码将在按钮可供检索之前执行。@zizozu这些只是代码片段,并不意味着是一个完整的解决方案。可以在头上附加这样一个侦听器,
$(文档)。on('click','#submit function(){\\do stuff})
这是。@anstosa:如果DOM准备好后就有了
#submit
的话,那么这肯定不是正确的方法:)为什么?因为它监听整个文档中的事件(称为事件委派,它涉及事件冒泡并检查事件的目标)。如果确实需要使用事件委派(有时是这样),则应使用元素的选择器替换
文档
,您确定该元素将保留附加的事件,并且您确定
#submit
元素将出现在其中(如果有)。这样可以限制您的影响。这是一个非常丑陋的解决方案,在大型应用程序中很难维护。
<form action='' onsubmit="return false;">
<form action='' onsubmit="doSomeWork();return false;">
$(function(){
    $('#msg-form').submit(function(event) {
        event.preventDefault();
        // code executed when user tries to submit the form
    });
});