【问题标题】:How to trigger a validation on only Button Click or Input:Submit如何仅在按钮单击或输入上触发验证:提交
【发布时间】:2010-11-24 22:25:04
【问题描述】:

我在我的 asp 页面中使用更新面板,并且我正在对异步回发进行 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 {

                }

            }
        }

我想要做的就是:仅对按钮提交进行第二次验证,而不是针对所有内容...我确实在此页面上收到了其他回发,这些回发也每次都得到验证(我想避免这种情况)...

我不知道这种方法好不好...我一直在努力解决这个问题..非常感谢您的帮助...

【问题讨论】:

  • 为了清楚起见,您想仅在按下submit按钮时触发验证?
  • 是的..我想在按钮点击时触发......如果你看到我的代码..我第一次使用按钮 id 检查 objargs.id..我必须全部完成我有其他按钮..但问题是这些按钮不会在时间加载...然后在 asp.net formview 内...我想要的是..如果有可能我可以为所有按钮和然后我需要检查(.btnupdate)。点击是真的然后验证否则不要..我希望你明白我在说什么..非常感谢..

标签: asp.net jquery validation


【解决方案1】:

假设您希望在有人按下回车按钮时提交表单,并且您只想在按下 @ 时提交表单987654323@按钮:

$(document).ready(
    function(){
        $('form').keypress(
            function(event){
                if (event.keyCode == '13'){

                    return false;
                }
            });
        $('input:submit').click(
            function(){
                $(this).closest('form').submit();
            });
        $('form').submit(
            function(){
                $('#success').text('form submitted! (Not really...)');
                return false;
                // Just to stop the error messages
                // in this demo.
            });
    });

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

如果我的假设有误,请发表评论,我会尽力纠正自己。

【讨论】:

  • hmm..no..我的页面上有 3 个更新按钮..我需要验证这三个按钮...因为我使用更新面板,它总是验证每个部分的页面回发..我不想对每个部分回发进行验证..只是为了点击按钮...无论如何都要检查 if(button.click)== true {validate} 否则没有验证..谢谢你的帮助...
  • 那么,仅在单击按钮时验证?如果是这样,您使用的是什么类型的buttons? &lt;input type="submit" /&gt;&lt;button type="submit"&gt;&lt;/button&gt; 或其他类型?
  • 它的 asp.net 按钮..我只想用 cssclasss 来做。有可能吗?谢谢...
  • @Sunny43,恐怕我几乎没有使用 asp.net 工作或做任何事情的经验,所以我无法就此事提出建议,我'我很抱歉地说。我会用“asp.net”(或类似的)重新标记您的问题,看看是否有知识渊博的人可以提供帮助。
【解决方案2】:

如果您的问题只是找到需要验证的按钮,那么 解决此问题的一种方法是向要触发验证的按钮添加一个类,例如:

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

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

var buttons = $('.Validate');

获取每个按钮的id:

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

【讨论】:

  • 我想检查它是否是按钮单击然后验证...下面的代码对按钮 ID 进行验证..如果我可以使用您的代码获取按钮 ID,我的问题就解决了...我不想在每个窗体视图上执行 Findcontrol()...我可以使用按钮的 CssClass 获取按钮 ID...谢谢您的回复.. 我想检查 objpost.Id = Button Id var objPost = args。 get_postBackElement(); if (objPost === null || objPost === undefined) 返回; if (objPost.id == '')
  • 或者如果我可以检查 If((buttons).click)=true.. 也适用于我.. 只是想检查是否有任何按钮被点击..
  • 我不确定这个编辑是否有帮助,我只是展示了如何获取按钮 ID
  • 如何检查表单中的按钮点击..如果是按钮点击我继续进行验证,否则我不..谢谢您的回复..
  • 是否在所有按钮上添加了验证类?
【解决方案3】:

哦..上帝终于找到了解决我问题的方法...首先,如果我的问题不清楚,我深表歉意....

我的验证适用于异步回发...我只想在按钮单击时验证我的表单..我的页面中有一个 asp.net 网格视图..如果我单击分页或网格上的某些内容,它会触发验证...我想避免这种情况..

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

var objPost = args.get_postBackElement();

然后我正在检查类型..

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

这结束了我两天的挣扎...... 非常感谢您的支持和帮助...

【讨论】:

  • 如果这确实是您的最终解决方案,您应该单击此答案旁边的空复选标记,并且在 ` 标记内格式化您的代码不会有什么坏处。
【解决方案4】:

尝试不同的方法。 使用带有 UseSubmitBehavior=true 的 asp.Net 按钮进行提交 并使用带有 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(); 
       });            

【讨论】:

  • 感谢 sid..我的解决方案工作正常..你的也很好看..我会试一试..再次感谢...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-12-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多