zoukankan      html  css  js  c++  java
  • 验证控件网页代码分析3

    现在,我们有输入一些东西,再点击提交按钮,看一下代码如何走
    首先是,在ValidatorOnLoad->ValidatorHookupControlID->ValidatorHookupControl函数中,文本框的

    onchange事件被指向ValidatorOnChange,因此在调试时,第一次点击按钮时,先会激发ValidatorOnChange。

    function ValidatorOnChange(event)
    {
      
    //如果没有设置事件的话,取window的事件?
      if (!event)
        event 
    = window.event;
      Page_InvalidControlToBeFocused 
    = null;
      
    var targetedControl;
      
    //获取事件源控件
      if ((typeof(event.srcElement) != "undefined"&& (event.srcElement != null))
        targetedControl 
    = event.srcElement;
      
    else
        targetedControl 
    = event.target;
      
    var vals;
      
    //获取源控件的对应验证控件
      if (typeof(targetedControl.Validators) != "undefined")
        vals 
    = targetedControl.Validators;
      
    else
      
    {
        
    if (targetedControl.tagName.toLowerCase() == "label")
        
    {
          
    //htmlFor?DHMTL中有,不是微软自己高兴乱加的
          targetedControl = document.getElementById(targetedControl.htmlFor);
          vals 
    = targetedControl.Validators;
        }

      }

      
    var i;
      
    //对所有验证控件都进行验证
      for (i = 0; i < vals.length; i++)
        ValidatorValidate(vals[i], 
    null, event);
      
    //更新网页的验证情况
      ValidatorUpdateIsValid();
    }

    接着执行按钮的提交代码,执行的子程序前一部分验证功能与之前说的过程一样,列表如下:
    WebForm_PostBackOptions
    WebForm_DoPostBackWithOptions
      Page_ClientValidate
        ValidatorValidate
          IsValidationGroupMatch
          evaluationfunction=RequiredFieldValidatorEvaluateIsValid
            ValidatorGetValue
            ValidatorTrim
          ValidatorUpdateDisplay
        ValidatorUpdateIsValid
          AllValidatorsValid
        ValidationSummaryOnSubmit
    当页面验证完成后,以后的代码就开始有差异了
      if (validationResult)
      
    {
        
    //如果按钮有设置actionUrl,则网页将转向该位置
        if ((typeof(options.actionUrl) != "undefined"&&
            (options.actionUrl 
    != null&&
            (options.actionUrl.length 
    > 0))
          theForm.action 
    = options.actionUrl;
        
    //如果按钮有trackFocus?,则执行?,这里没有所以跳过
        if (options.trackFocus)
        
    {
          
    var lastFocus = theForm.elements["__LASTFOCUS"];
          
    if ((typeof(lastFocus) != "undefined"&& (lastFocus != null))
          
    {
            
    if (typeof(document.activeElement) == "undefined")
              lastFocus.value 
    = options.eventTarget;
            
    else
            
    {
              
    var active = document.activeElement;
              
    if ((typeof(active) != "undefined"&& (active != null))
              
    {
                
    if ((typeof(active.id) != "undefined"&&
                    (active.id 
    != null&&
                    (active.id.length 
    > 0))
                  lastFocus.value 
    = active.id;
                
    else if (typeof(active.name) != "undefined")
                  lastFocus.value 
    = active.name;
              }

            }

          }

        }

      }

      
    //如果按钮有设clientSubmit,则直接提交,这里没有
      if (options.clientSubmit)
        __doPostBack(options.eventTarget, options.eventArgument);

    执行完,好象没什么大事发生。

    返回主页面,进行正式的提交。也是执行:WebForm_OnSubmit->ValidatorOnSubmit->ValidatorCommonOnSubmit。只是返回值为true。激发action,真正的提交给服务器。
    结束

  • 相关阅读:
    java中Object转String
    JSON以及Java转换JSON的方法(前后端常用处理方法)
    JS基础如何理解对象
    图解数据结构(7)——二叉查找树及平衡二叉查找树(一共14篇)
    C++虚函数表解析(图文并茂,非常清楚)( 任何妄图使用父类指针想调用子类中的未覆盖父类的成员函数的行为都会被编译器视为非法)good
    C++中代理类和句柄类
    C++的 RTTI 观念和用途(非常详细)
    川普就是领着一群工业革命时代的棺材瓤子,发动了一次资本主义复辟,面对互联网不过是一次新的砸机器运动
    基于.NET MVC的高性能IOC插件化架构
    雅虎35条
  • 原文地址:https://www.cnblogs.com/yzx99/p/1170750.html
Copyright © 2011-2022 走看看