如何仅在按钮单击或输入:提交时触发验证

时间:2010-11-24 22:25:04

标签: asp.net jquery validation

我在我的asp页面中使用Update Panel,我正在对异步回发进行JQuery验证...

我只想在按钮点击或提交时验证我的表单... 我的问题是..所有我的按钮都有不同的表格视图,不会一次加载...这就是为什么我无法使用按钮ID并使用点击事件...这是我的代码..

 Sys.WebForms.PageRequestManager.getInstance().add_initializeRequest(ValidateMyForm);
 function ValidateMyForm(sender, args) {
            var objPost = args.get_postBackElement();
            if (objPost === null || objPost === undefined) return;
            if (objPost.id == '<%= ((Button)(formViewinfo.FindControl("btnUpdate"))).ClientID %>') {
                $('#pnlerrors').fadeOut('fast');
                $('#pnlItemErrors').fadeOut('fast');

                var isValid = $('#form1').validate({
                    errorClass: 'error',
                    invalidHandler: function (e, validator) {
                        var errors = validator.numberOfInvalids();
                        if (errors) {
                            $('#pnlerrors').html('<p>&nbsp;Please correct the errors  </p>').fadeIn('fast');
                            document.location.href = '#pnlerrors';
                        }
                    }, submitHandler: function () {

                    }
                }).form();

                if (!isValid) {
                    CancelPostback(sender, args);
                } else {

                }

            }
            //this is for rest of buttons
            else {
                $('#pnlItemErrors').fadeOut('fast');
                $('#pnlerrors').fadeOut('fast');
                var isValid = $('#form1').validate({
                    errorClass: 'error',
                    invalidHandler: function (e, validator) {
                        var errors = validator.numberOfInvalids();
                        if (errors) {
                            $('#pnlerrors').fadeOut('fast');
                            document.location.replace('#', '#pnlItemErrors');
                            $('#pnlItemErrors').html('<p>&nbsp;Please correct the errors </p>').fadeIn('fast');
                            document.location.href = '#pnlItemErrors';
                        }
                    }, submitHandler: function () {
                    }
                }).form();

                if (!isValid) {
                    CancelPostback(sender, args);
                } else {

                }

            }
        }

我想要做的就是:第二次验证只按钮提交不是为了所有内容...我在这个页面上得到了其他回发,并且每次回复都会得到验证(我想避免这个)...

我不知道这种方法是好还是不长......我很久以来就在苦苦挣扎......我真的很感谢你的帮助......

4 个答案:

答案 0 :(得分:1)

如果您的问题只是找到需要进行验证的按钮 解决这个问题的一种方法是在要触发验证的按钮上添加一个类,例如:

<asp:button id="btn1" cssclass="Validate"/>

然后你可以在JQuery中获取所有这些按钮:

var buttons = $('.Validate');

获取每个按钮ID:

$(buttons).each(function(){
   var id = this.id;
});

答案 1 :(得分:1)

假设您想要在有人按下输入按钮时提交表单,您只想在按下{时提交表单{1}}按钮:

submit

There's a JS Fiddle demo, here: http://jsfiddle.net/davidThomas/5PaWz/

如果我在我的假设中弄错了,请发表评论,我会尽力纠正自己。

答案 2 :(得分:1)

ohh..god终于找到了我的问题的解决方案......首先,如果我的问题不明确,我会道歉......

我的验证适用于异步回发...我只想在按钮点击上验证我的表单..我的页面中有一个asp.net网格视图..如果我点击分页或它触发的网格上的东西验证......我想避免这个......

为此我做的是...我正在使用以下语句捕获回发元素。

var objPost = args.get_postBackElement();

然后我正在检查类型..

if (objpost.type == 'submit') { do validation }
else { don't }..

这结束了我2天的斗争...... 非常感谢你的支持和帮助...

答案 3 :(得分:0)

尝试不同的方法。 使用asp.Net Button和UseSubmitBehavior = true进行提交 并且对于您不希望它们触发验证过程的按钮,使用带有UserSubmitBehavior = false的asp.Net Button。将以下代码添加到表单

function ValidateForm()
{   
   var errors ="";
   if (typeof(Page_ClientValidate) == 'function') 
   {
        if (typeof (Page_ClientValidate) == 'function') { Page_ClientValidate();     } 
        if (!Page_IsValid)
        {                        
               for (i = 0; i < Page_Validators.length; i++) {         
                var inputControl = document.getElementById(Page_Validators[i].controltovalidate);               
                if (!Page_Validators[i].isvalid) {                                                        
                    errors = errors + ";" +  Page_Validators[i].errormessage;
                    inputControl.style.border ="solid 2px #FF0000";
                }                        
              }
        }    

        return Page_IsValid;
  }
  return true; 
}

$(document).ready(function(){  
/*********************************************************************/
///handle form submittion and run validation prior to that 
///if a textbox has required field validator, stop form submittion and
/// highlight the text box
/*********************************************************************/                            
  $('#form1').submit(function(){                                                
       return   ValidateForm(); 
       });