jQuery-取消表单提交(使用“return false”?)?

jQuery-取消表单提交(使用“return false”?)?,jquery,request-cancelling,Jquery,Request Cancelling,我在尝试取消表单提交时遇到了一些麻烦。我一直在关注这个教程(尽管我没有制作登录脚本),它似乎对他有用 这是我的表格: <form action="index.php" method="post" name="pForm"> <textarea name="comment" onclick="if(this.value == 'skriv här...') this.value='';" onblur="if(this.value.length == 0)

我在尝试取消表单提交时遇到了一些麻烦。我一直在关注这个教程(尽管我没有制作登录脚本),它似乎对他有用

这是我的表格:

    <form action="index.php" method="post" name="pForm">
        <textarea name="comment" onclick="if(this.value == 'skriv här...') this.value='';" onblur="if(this.value.length == 0) this.value='skriv här...';">skriv här...</textarea>
        <input class="submit" type="submit" value="Publicera!" name="submit" />
    </form>
我已经在标题中导入了jQuery,我知道它正在工作。我的第一个想法是,它可能已经过时了,但实际上“仅仅”一年前

有人知道怎么回事吗

提前谢谢

编辑:据我所知,中止提交的最简单、最合适的方法是返回false?但我似乎无法让它工作。我搜索了论坛,找到了一些有用的线索,但没有一条真正有效。我一定是搞砸了什么东西。

试试用


我也遇到过类似的问题。我通过在验证之前删除表单的操作和方法,然后在验证之后将它们重新添加到表单中来解决这些问题。以下是我编写的验证器:

var Validator = function (formSelector) {
    this.formSelector = formSelector;
//  $(formSelector).submit(function() {return false;});
        this.Action = $(formSelector).attr("action");
        this.Method = $(formSelector).attr("method");
    $(formSelector).attr("action",function(){return ""}).attr("method",function(){return ""});  
        var donotsubmit = false;
        var notjustcheckbox = false;
        var checknotchecked = false;
    this.Required = new Array();
    this.Email = new Array();
    this.validate = function () {
        this.form = $(this.formSelector);
        var i = 0;
        for (i in this.Required){
            $(this.Required[i]).attr("value", function(index,attr){
                // Check on checkboxes...   
                if (this.getAttribute("type") == "checkbox"){
                    if (this.checked == false){ 
                        checknotchecked = true;
                        donotsubmit = true;
                    } else {
                    }       
                } else {    
                    if (attr == "" || attr == undefined){   
                        this.style.border = "1px solid red";
                        notjustcheckbox = true;
                        donotsubmit = true;     
                    } else {
                        this.style.border = "1px solid green";
                    }
                }
            });
        }
        i = 0;
        for (i in this.Email){
            $(this.Email[i]).attr("value", function(index,email){
                var filter=/^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i ;
                if (filter.test(email) == true || filter.test(email) == "true") {
                    this.style.border = "1px solid green";
                } else if (filter.test(email) == false) {
                    donotsubmit = true;
                    notjustcheckbox = true;
                    this.style.border = "1px solid red";
                }
            });
        }
        if (donotsubmit == true){
            if (checknotchecked == true && notjustcheckbox == true){    
                alert("Please correct the fields in red and check the required checkboxes");
            } else if (checknotchecked == true && notjustcheckbox == false){
                alert("Please check the required checkboxes");
            } else {
                alert("Please correct the fields in red");
            }
            checknotchecked = false;
            notjustcheckbox = false;
            donotsubmit = false;
        } else {
            $(formSelector).attr({action : ''+this.Action+''});
            $(formSelector).attr({method : ''+this.Method+''});
            $(formSelector).submit();   
        }
        return true;
    };
};
您可以这样实现它:

$(document).ready(function(){
    var myForm = new Validator("#formId");
        myForm.Required = new Array("input.lightborder");
                myForm.Email = new Array("#email");
                $("#form-submit-button-id").click(function(){
                    myForm.validate();
                });
});
$('#upload_form').submit(function(){ before_submit('argument') });

您可以为必填字段添加CSS选择器。电子邮件的名称必须是唯一的。

名称的值需要在其周围加引号。试试这个:

$(document).ready(function() {
    $("form[name='pForm']").submit(function(){
        return false;
    });
});

谢谢大家的回复!我的一个朋友让我喝了酒补充说

onsubmit="return(false)

在表格上。这是可行的,但我还是想知道一个非内联javascript技巧是否可行。

应该可以。这件事可能还有更多的问题。不幸的是,您的问题中的代码没有一种风格,因此很难确定根本原因。可能您根本没有导入jQuery库。或者在导入jQuery库之前调用了
$(document).ready()
。或者您有另一个JS库,它与
$()
冲突。或者实际表单没有所需的名称。等等等等

为了让你开始,这里有一个完整的。你需要做的就是复制粘贴运行它

<!DOCTYPE html>
<html lang="en">
    <head>
        <title>SO question 3569072</title>
        <script src="http://code.jquery.com/jquery-latest.min.js"></script>
        <script>
            $(document).ready(function() {
                $('form[name=pForm]').submit(function() {
                    alert('Submit blocked!');
                    return false;
                });
            });
        </script>
    </head>
    <body>
        <form action="index.php" method="post" name="pForm">
            <textarea name="comment" onclick="if(this.value == 'skriv här...') this.value='';" onblur="if(this.value.length == 0) this.value='skriv här...';">skriv här...</textarea>
            <input class="submit" type="submit" value="Publicera!" name="submit" />
        </form>
    </body>
</html>

所以问题3569072
$(文档).ready(函数(){
$('form[name=pForm]')。提交(函数(){
警报(“提交被阻止!”);
返回false;
});
});
斯克里夫·här。。。
如果它有效(至少,它在这里有效,我得到一个警告,表单根本没有提交),将其与您自己的代码进行比较,并尝试将您自己的代码缩减为这种风格,以便您能够更好地发现差异(从而发现错误)


无论如何,在我看来,让自己学习一些基本/琐碎的jQuery(最好是JavaScript)教程是值得的,这样你就可以更好地了解封面下发生的事情,并学习如何使用类似的工具。

我也有这个问题,我的代码(不起作用)是这样的:

$(document).ready(function(){
    var myForm = new Validator("#formId");
        myForm.Required = new Array("input.lightborder");
                myForm.Email = new Array("#email");
                $("#form-submit-button-id").click(function(){
                    myForm.validate();
                });
});
$('#upload_form').submit(function(){ before_submit('argument') });
在“before_submit”函数中,我使用了“return false”来阻止表单提交:

function before_submit() {

.........................................................
return false;
}
在将事件处理程序函数绑定到表单时,我将“return”放在了一起,它成功了:

$('#upload_form').submit(function(){ return before_submit('argument') });
附加到submit事件的函数必须返回false(在我的例子中是匿名函数)。 因此……这是解决此问题的一个原因的一个解决方案,您指出“返回false之前的警报未显示”


使用jQuery时,submit元素的id或名称不能为“submit”-如果为“submit”,则不会触发submit事件。

这只是我对这个(未回答,也有日期)问题的微薄贡献。 我已经多次使用相同的解决方案解决此问题:

不要使用

<input name="submit" />

这会触发错误的元素/项,不会导致错误或警告。因此,只需将提交按钮命名为其他名称,一切就会神奇地重新开始工作。

我也遇到了同样的问题,原因是在表单上使用Rails和
:remote=>true
。Rails jQuery驱动程序进入并通过ajax提交表单,而我自己的函数试图使用
return false
event.preventDefault()
暂停提交过程


因此,请注意干扰您自己的javascript的框架和默认操作<代码>返回false应该有效:)

您尝试访问的表单可能会动态添加到您的页面中。在这种情况下,您需要使用委托来访问该表单

例如:

    $(document).delegate("#myform","submit",function(){
       return false;
});

您必须执行某种“双重返回”,或者换句话说,您必须返回返回的内容。因此,您有您的html:

<form action="index.php" onsubmit="return cancelSubmit()" method="post" name="pForm">
    <textarea name="comment" onclick="if(this.value == 'skriv här...') this.value='';" onblur="if(this.value.length == 0) this.value='skriv här...';">skriv här...</textarea>
    <input class="submit" type="submit" value="Publicera!" name="submit" />
</form>
您可以在上面的函数中放置任何类型的条件。看来你只是想取消它。希望这对其他遇到这个答案的人有所帮助。

这个怎么样

$('form[name=pForm]').on('submit',function()
{
    console.log("(^o^)");
    return false;
});

是否有任何JavaScript错误发生?您的代码似乎完全正常,我会尝试在“return false;”之前放置警报,以查看是否实际到达了该部分。没有错误。警报没有出现(请尝试使用alert($('form[name=pForm]')。length);而不是$(…)。submit(…),它将显示您的jquery选择器是否找到任何内容。(返回的数字是找到的元素数,因此0将为零)。如果需要转义,它只需要引号:)在这种情况下,这不应该是一个问题。这是正确的。请参阅欢迎使用堆栈溢出!请不要仅使用源代码回答。请尝试提供有关解决方案工作原理的详细说明。请参阅:。谢谢
function cancelSubmit() {
    return false; // return true if you want submission to carry through
}
$('form[name=pForm]').on('submit',function()
{
    console.log("(^o^)");
    return false;
});