JQuery验证失败后页面仍然回发

Posted

技术标签:

【中文标题】JQuery验证失败后页面仍然回发【英文标题】:Page still Postbacks after JQuery validation fail 【发布时间】:2015-07-05 14:23:02 【问题描述】:

我有一个应用了 JQuery 验证的 ASP.Net Web 表单页面。问题是,当验证失败时,页面仍然回发。我有两个具有required : true 验证的文本框。 这是我的提交按钮代码:

<button id="btnSubmit" class="btn btn-info" type="button" onserverclick="btnSubmit_Click" onclick="checkValidate(event);" causesvalidation="true" 
runat="server"> 
<i class="icon-ok bigger-110"></i>Submit 
</button>

这是 JQuery 的验证方法:

$(function()  
            $('#validationForm').validate( 

             errorElement:'span',
             errorClass: 'help-inline', 
             focusInvalid: false, 
                      //debugger;
             rules:  
             <%=txtName.UniqueID %>:  
             required: true 
            , 
        <%=txtDescription.UniqueID %>:  
        required: true 
         
      , 

        messages:  
        <%=txtName.UniqueID %>:  
        required: "Please provide a valid name." 
        , 
        <%=txtDescription.UniqueID %>:  
        required: "Please specify a description."
        , 
      , 
        invalidHandler: function (event, validator)  //display error alert on form submit   
                        $('.alert-error', $('.login-form')).show();
                    ,

                    highlight: function (e) 
                        $(e).closest('.control-group').removeClass('info').addClass('error');
                    ,

                    success: function (e) 
                        $(e).closest('.control-group').removeClass('error').addClass('info');
                        $(e).remove();
                    ,

                    submitHandler: function (form) 
                    ,
                    invalidHandler: function (form) 
                    
                );
                )

这是检查按钮点击验证的方法:

function checkValidate(evt)  
// Validate the form and retain the result. // 
var isValid = $('#validationForm').valid(); 
// // If the form didn't validate, prevent the form submission. //
//debugger; 
if (!isValid) 
evt.preventDefault(); 
evt.stopPropagation(); 
return false; 
else 
return true; 

这是我的按钮呈现的 html

<button onclick="checkValidate(event); __doPostBack('ctl00$ContentPlaceHolder1$btnSubmit','')" id="ContentPlaceHolder1_btnSubmit" class="btn btn-info" type="button"> 
<i class="icon-ok bigger-110"></i>Submit 
</button>

另外,我将调试器放在 checkValidate() 方法中,发现那里一切正常,但在方法结束后,页面回发。我在浏览器的控制台上运行了 JQuery valid() 方法,它也运行良好,返回了正确的值。 当文本框为空时: 填充文本框时:

问题到底出在哪里?验证失败时如何停止页面回发?

【问题讨论】:

默认阻止点击按钮提交,如果验证成功则使用 submit() 函数 我的按钮类型是type="button" 而不是type="submit"。此外,当验证返回 false 时,我还写了 evt.preventDefault(); evt.stopPropagation(); 。这应该让按钮停止提交,但事实并非如此:/ @madalinivascu 您还没有显示表单的来源,尽管这个问题可能会帮助***.com/q/3591634/1741542 【参考方案1】:

使用

onclick="return checkValidate(event);"

【讨论】:

我已经这样做了,但现在页面根本没有提交..即使验证返回 true。 ://【参考方案2】:

你可以这样做:

onclick="if (checkValidate(event)) YOURMETHODTOEXECUTE_ON_SUCCESS()"

显然,您需要稍微重构代码,但它应该以这种方式工作。

根据评论,在这种情况下,您可以使用:

onclick="return !!yourFunction()"

无需更改您的 onserverclick=""

【讨论】:

我想在成功时执行的方法是服务器端的ButtonClick方法,我已经提到过onserverclick="btnSubmit_Click"所以我不能写在客户端的点击事件上 onclick="return !!yourFunction()" yourFunction 是什么? JQuery 验证功能还是我的服务器端功能? @克里斯 对不起,这应该是你的验证功能【参考方案3】:

我终于做到了。我刚刚在我的表单上添加了 onsubmit 属性并在其中设置了 jquery 有效方法。 这是我之前的表单代码

<form class="form-horizontal" id="validationForm" method="post" runat="server">

这是在我更改之后。

<form class="form-horizontal" id="validationForm" onsubmit="return $('#validationForm').valid()" method="post" runat="server">

以为我仍然不知道为什么即使验证返回 false 也会触发回发

【讨论】:

以上是关于JQuery验证失败后页面仍然回发的主要内容,如果未能解决你的问题,请参考以下文章

在 ASP.NET 代码中通过 javascript 重置 Jquery 验证后停止回发

jQuery 验证插件。回发后errorLabelContainer不起作用

使用 jQuery Validation 和 jQuery Placeholder Enhanced 验证失败后占位符消失

Codeigniter:选中复选框时表单验证仍然失败

回发前在 Jquery LinkBut​​ton 中验证表单(使用 Html Validate)

Firebase 身份验证登录但成功登录后重定向到主页失败(服务器响应 200)