使用JQuery - 阻止表单提交

Luc*_*ord 156 forms jquery

如何阻止表单使用jquery提交?

我尝试了一切 - 看到我在下面尝试过的3个不同的选项,但这一切都行不通:

    $(document).ready(function() { 

            //option A
            $("#form").submit(function(e){
                e.preventDefault();
            });

            //option B
            $("#form").submit(function(e){
                stopEvent(e);
            });

            //option C
            $("#form").submit(function(){
                return false;
            });
    });
Run Code Online (Sandbox Code Playgroud)

可能有什么不对?

更新 - 这是我的HTML:

    <form id="form" class="form" action="page2.php" method="post"> 
       <!-- tags in the form -->
       <p class="class2">
           <input type="submit" value="Okay!" /> 
       </p>
    </form>
Run Code Online (Sandbox Code Playgroud)

这里有什么不对吗?

Phi*_*rie 232

两件事突出:

  • 您的表单名称可能不是form.而是通过删除#来引用标记.
  • e.preventDefault也是正确的JQuery语法,例如

        //option A
        $("form").submit(function(e){
            e.preventDefault();
        });
    
    Run Code Online (Sandbox Code Playgroud)

选项C也应该有效.我不熟悉选项B.

一个完整的例子:

<html>
    <head>
        <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>

        <script type='text/javascript'>
         $(document).ready(function() {
            //option A
            $("form").submit(function(e){
                alert('submit intercepted');
                e.preventDefault(e);
            });
        });
        </script>
    </head>

    <body>
        <form action="http://google.com" method="GET">
          Search <input type='text' name='q' />
          <input type='submit'/>
        </form>
    </body>
</html>
Run Code Online (Sandbox Code Playgroud)

  • 还有别的错.我每天都在使用这种技术.最好的猜测是页面上有JavaScript错误,也许用FireBug检查一下? (2认同)

Art*_*lev 28

您可能在页面上使用了少量表单并使用$('form').submit()将此事件添加到页面上第一次出现的表单中.请改用类选择器,或尝试这样做:

$('form').each(function(){
    $(this).submit(function(e){
        e.preventDefault();
        alert('it is working!');
        return  false;
    })
}) 
Run Code Online (Sandbox Code Playgroud)

或更好的版本:

$(document).on("submit", "form", function(e){
    e.preventDefault();
    alert('it works!');
    return  false;
});
Run Code Online (Sandbox Code Playgroud)


The*_*pha 18

要提前默认/阻止表单提交使用

e.preventDefault();
Run Code Online (Sandbox Code Playgroud)

停止事件冒泡使用

e.stopPropagation();
Run Code Online (Sandbox Code Playgroud)

为了防止表单提交'return false'也应该工作.

  • 什么是起泡? (5认同)
  • [jQuery on](http://api.jquery.com/on/)API声明:"从事件处理程序返回false将自动调用`event.stopPropagation()`和`event.preventDefault()`. false`值也可以作为`function(){return false;}`的简写传递给处理程序." (2认同)

Luk*_*kti 7

我也有同样的问题.我也尝试了你尝试过的东西.然后我改变我的方法不使用jquery,而是使用form标签中的"onsubmit"属性.

<form onsubmit="thefunction(); return false;"> 
Run Code Online (Sandbox Code Playgroud)

有用.

但是,当我试图仅在"thefunction()"中设置false返回值时,它并不会阻止提交过程,所以我必须把"return false;" 在onsubmit属性中.所以,我得出结论,我的表单应用程序无法从Javascript函数获取返回值.我对此一无所知.


小智 5

我遇到了同样的问题,我以这种方式解决了(不优雅但有效):

$('#form').attr('onsubmit','return false;');
Run Code Online (Sandbox Code Playgroud)

在我看来,它的优势在于您可以随时恢复这种情况:

$('#form').attr('onsubmit','return true;');
Run Code Online (Sandbox Code Playgroud)


小智 5

将事件附加到提交元素而不是表单元素。例如在你的html中这样做

$('input[type=submit]').on('click', function(e) {
    e.preventDefault();
});
Run Code Online (Sandbox Code Playgroud)