JavaScript高級プログラム設計の知識点イベントとスクリプトの処理

11732 ワード

1.イベントハンドラ
イベントとは、ユーザまたはブラウザ自身が実行する何らかのアクションであり、処理プログラムの名前がonから始まります.
1)イベント変数により、直接イベントオブジェクトにアクセスできる:onclick=「alert(event.type)」出力click;this変数により、ターゲット要素にアクセスできます.
<input type="button" value="feng" onclick="alert(this.value)"/>//  feng
もちろんこのようにすれば、例えば、処理関数はボタン画像ページの一番下に定義されています.ページの内容は刷りましたが、処理関数は解析を開始していません.システムエラーが発生しました.
次のような方式に変えたら避けられます.
<input type="button" value="Click me" onclick="try{showMessage();}catch(ex){}"/>
type属性を使うことで、一つの関数を使って複数のイベントを処理することができます.例えば、ボタンの3つの状態の遷移
第一の方法:
<!DOCTYPE html>
<html lang="zh-CN">
  <head>
    <meta charset="utf-8"/>
    <script>
    window.onload=function(){//  ,        window        JS  ,  btn  null,          
        var btn = document.getElementById("myBtn");
        var handler = function(event){
          switch(event.type){
            case "click":
              alert("Click");
              break;
            case "mouseover":
              event.target.style.backgroundColor = "red";
              break;
            case "mouseout":
              event.target.style.backgroundColor = "";
              break;
          }
        };
        btn.onclick = handler;
        btn.onmouseover = handler;
        btn.onmouseout = handler;
      }
    </script>
  </head>
  <body>
    <input id="myBtn" type="button" value="Click me"/>
    
  </body>
</html>
第二の方法:ブラウザをまたぐEventUtilオブジェクトでサポートを提供する.
 EventUil.addHandler(window,"load",function(event){
          //      ,        , script
          var img = document.createElement("img");
          //       onload    ,               
          EventUil.addHandler("img","load",function(event){
            <span style="color:#ff0000;">event = EventUtil.getEvent(event);</span>
            alert(EventUtil.getTarget(event).src)

            //         ,    src  
            document.body.appendChild(image);
            //  src        
            image.src = "smile.gif";
          })
        })
組織が指定されたURLにリンクするように、event.stopPropagation()を使用して、特定のイベントのデフォルト動作を阻止することができる.
2.イベントの種類
1)UIイベント
1.load:ページが完全にロードされた後、windowの上でトリガされ、すべてのフレームがロードされた時にフレームセットから出発し、画像のロードが完了した時に、cdでトリガされます.
<!--            ,  windows.load=function,      body   ,
      window.onload=function(){ alert("aaa");}  
              aaa,   feng -->
  <body onload = "alert('feng')">
    <input id="myBtn" type="button" value="Click me"/> 
  </body>
2.unload:xxxが完全にアンインストールされたらトリガ
3.abort:ユーザーがダウンロードを停止した時
2)フォーカスイベント
1.blur:元素が焦点を失うとトリガになります.
2.focus:元素またはゴムテレビがトリガされる時
3)マウスとホイールイベント
1.lick:マウスの左ボタンをクリックするか、バックボタンを押すかはトリガです.
2.dblclick:マウスの左ボタンをダブルクリックする
3.mouseout:
4.mouseover
5.マウスイベントをトリガするのは、イベントの座標属性です.
ブラウザのビューエリアの水平と垂直座標(clientX、clientY)
ページ座標位置(ブラウザ左上角相対)(PageX、PageY)
コンピュータのスクリーン座標位置:(screenX、screenY)
6.event.keyCode:キーボードボタンのASCII値
3.メモリと性能
1)イベント依頼:ある親要素の中に複数のサブ要素が同じイベントに応答すると、このイベントを親要素に依頼し、接続の回数を制限し、ターゲット・idを判断して区別する.このようにDOM元素だけを取得してメモリを節約します.
<!DOCTYPE html>
<html lang="zh-CN">
  <head>
    <meta charset="utf-8"/>
    <script>
      window.onload=function(){

        var list = document.getElementById("myUl");

        EventUtil.addHandler(list,"click",function(event){
          event = EventUtil.getEvent(event);
          var target = EventUtil.getTarget(event);
          alert(target)

          switch(target.id){
            case "li_a":
              document.title = "I changed the document's title";
              break;
            case "li_b":
              location.href = "http://www.baidu.com";
              break;
            case "li_c":
              alert("feng");
              break;
          }
        });
        
      }
    </script>
  </head>
  <body>
    <ul id="myUl">
      <li id="li_a">wei</li>
      <li id="li_b">xiao</li>
      <li id="li_c">feng</li>
    </ul>
    
  </body>
</html>
2)削除イベント:「div」などのラベルを設定したInnerHTML属性の前に、県ボタンのイベントハンドリング関数
var btn = document.getElementById("myBtn");//                  
      btn.onclick = function(){
        //       
        btn.onclick = null;//        ,    

        document.getElementById("myDiv").innerHTML = "Processing "
      }
4.フォームスクリプト
HTMLではフォームは
要素で表されていますが、JSではHTMLFormElementタイプに対応しています.
1)フォーム要素を取得する
<span style="font-size:18px;"> <span style="white-space:pre">	</span>var f1 = document.getElementById("myForm");//         </span>
<span style="font-size:18px;"><span style="white-space:pre">	</span>var first = document.forms[0];//        </span>
2)フォームの提出:次の3つのいずれかのフォームの送信をトリガするイベント
<span style="font-size:18px;">      <!--      -->
      <input type="sbumit" value="Submit Form" /><span style="color:#ff0000;">//var btn=document.getElementById("myBtn"); btn.addEventListener("click",function(){},false);</span>
      <!--       -->
      <button type="submit">Submit Form</button>
      <!--    -->
      <input type="image" src="some.gif"></span>
<span style="font-size: 18px;">              :form.submit();          ,      submit  ,                   </span>
このようにフォームを提出すると、ブラウザはサーバに要求する前にsubmitイベントをトリガするので、ブラウザはこのタイミングでフォームの提出を許可するかどうかを決定します.
</pre><pre name="code" class="html">
<span style="font-size:18px;">          ,                 submit  ,                    
<!DOCTYPE html>
<html lang="zh-CN">
  <head>
    <meta charset="utf-8"/>
    <script>
      window.onload=function(){
        var EventUtil = {
          addHandler : function(element, type, handler){
            if(element.addEventListener){
              element.addEventListener(type,handler,false);
            }else if(element.attachEvent){
              element.attachEvent("on" + type, handler);
            }else{
              elmenet["on" + type] = handler;
            }

          },

          removeHandler : function(element, type, handler){
            if(element.removeEventListener){
              element.removeEventListener(type, handler, false);
            }else if(element.detachEvent){
              element.detachEvent("on"+type, handler);
            }else{
              element["on"+type] = null;
            }
          },
          //   event     
          getEvent:function(event){
            return event?event:window.event;
          },
          //       
          getTarget:function(event){
            return event.target||event.srcElement;
          },
          //         
          preventDefault:function(event){
            if(event.preventDefault){
              event.preventDefault();
            } else{
              event.returnValue = false;
            }
          }

    };

        var form = document.getElementById("myForm");
        EventUtil.addHandler(form,"submit",function(event){

          event = EventUtil.getEvent(event);
          EventUtil.preventDefault(event);
          alert("         ")
        });
      }
    </script>
  </head>
  <body>
    <form id = "myForm">
       <input  id="my"type="submit" value="Submit Form" />
    </form>
  </body>
</html></span>
3)フォームイベントをリセットする
   
EventUtil.addHandler(form,"reset",function(event){});
4)フォームフィールド
1.フォームごとにelements属性があります.この属性はフォームのすべてのフィールドのセットです.出現順にform.elements[1]で呼び出したり、name属性form.elements[name]で呼び出したりできます.
2.共通のフォームフィールドの属性
ディザブル:現在のフィールドは無効ですか?submit事件を監聴し、発生時btn.disabled=true;サブミットボタンを無効にして、繰り返しの提出を防止します.
readOnly:ブール値、現在のフィールドは読み取り専用ですか?
value:現在のフィールドはサーバの値に提出されます.ファイルフィールドには、この属性は読み取り専用で、ファイルのコンピュータへのパスが含まれています.
form:現在のフィールドに属するフォームのポインタを指し、読み取り専用です.
3.共通のフォームフィールド方法
focus():フォームフィールドにフォーカスを設定します.
blur():元素から焦点を移す
4.共有フォームフィールドイベント:blur、change、focus
4.テキスト枠のスクリプト
1)selectイベント:テキストボックス内のテキストをマウスで選択したときにトリガします.
 <span style="white-space:pre">	</span>var textbox = document.forms[0].elements["textbox1"];
        EventUtil.addHandler(textbox,"select",function(event){
          alert("Text selected"+textbox.value);//        ,        
        })
2)フィルタ入力
1.入力された文字を判断することにより、指向性の阻止を行う:
例:数字は入力ボックスにのみ入力できます.
<span style="white-space:pre">	</span>var textbox = document.forms[0].elements["textbox1"];
        EventUtil.addHandler(textbox,"keypress",function(event){
          event = EventUtil.getEvent(event);
          var target = EventUtil.getTarget(event);
          var charCode = EventUtil.getCharCode(event);
          alert(charCode)
          if(!/\d/.test(String.fromCharCode(charCode))){//       
            alert(charCode)
            EventUtil.preventDefault(event);
          }
        });
は、EventUtilに以下の関数を追加する必要があります.
getCharCode:function(event){
            if (typeof event.charCode == "number"){
              return event.charCode;
            }else return event.keyCode;//IE8   opera   
          }
3)
オートフォーカス機能:入力文字が上限に達したら自動的に次のテキストボックスにジャンプします.下はスクリプトです.Hmtlファイルは省略されました.3つの入力ボックスです.
(function(){
          function tabForward(event){
            event = EventUtil.getEvent(event);
            var target = EventUtil.getTarget(event);


            if(target.value.length == target.maxLength){
              var form = target.form;

              for(var i =0,len =form.elements.length;i<len;i++){
                if(form.elements[i] == target) {
                  if(form.elements[i+1]){
                    form.elements[i+1].focus();
                  }
                }
              }
            }
          }

          var textbox1 = document.getElementById("txt1");
          var textbox2 = document.getElementById("txt2");
          var textbox3 = document.getElementById("txt3");

          EventUtil.addHandler(textbox1,"keyup",tabForward);
          EventUtil.addHandler(textbox2,"keyup",tabForward);
          EventUtil.addHandler(textbox3,"keyup",tabForward);

        })();
5.枠スクリプトを選択する
1)アクセスオプションデータ
<span style="white-space:pre">	</span>   var selectbox = document.forms[0].elements["location"];

          var text = select.options[0].text;//     
          var value= select.options[0].value;//