BOM經常使用對象

 1.BOM的經常使用對象: window  navigator history location dicument screen eventjavascript

        navigator:保存瀏覽器配置信息的對象css

               cookicEnablcd:判斷是否啓用cookichtml

               userAgent:判斷瀏覽器的名稱和版本號java

               plugins:保存瀏覽器中全部插件信息的集合node

        screen:保存顯示屏幕的對象信息瀏覽器

        history:保存當前的歷史記錄棧緩存

             history.go(-1):後退函數

             history.go(1):前進一次優化

             history.go(0):刷新this

             <a href="javascript:history.go(1);">前進一次</a>

         location:指代當前窗口正在訪問額url地址對象

         location.href:保存了當前窗口正在訪問的url地址

                  設置href屬性爲新url,會在當前窗口打開新的url
                   location.href="http://www.baidu.com"

         location.assign(url):在當前窗口打開新的url
                   location.assign("http://www.baidu.com");         

         location.reload(true/false);true:不管是否更改,都得到最新的

                           false:被更新的頁面,會重新獲取

                               未被修改的頁面在緩存中取

 2.事件:瀏覽器自動觸發的或用戶手動觸發的對象狀態的改變

   DOM Level2 Evenl標準:

   IE8:自成體系!

   事件處理函數:當事件發生時,自動執行的函數對象

     其實就是:on事件名

   如何綁定事件處理函數:3種:

   1.在html元素的開始標籤中設置事件處理函數屬性:

    好比:<button onclick="fun()"></button>

   2.在js中動態綁定事件處理函數:elem.on事件名=函數對象

    好比btn.onclick=function(){在這裏this==>btn}

    執行:btn.onclick=fun;

    問題:同一元素的同一事件處理函數,只能綁定一個函數對象

  3.在js中動態綁定事件處理函數,可同時綁定多個,可修改事件觸發順序

     DOM標準:elem.addEventListener("事件名",函數對象,是否在捕獲階段觸發)

     IE8:elem.attachEven("on事件名",函數對象);

     好比:btn.addEventListener("click",fun,false/true);

             btn.attachEvent("onclick",fun);

 

      事件週期:
        DOM: 3個階段:
           1. 捕獲: 從最外層元素,向內層元素,逐個記錄綁定的事件處理函數。默認,暫不觸發任何事件。
           2. 目標觸發: 優先觸發目標元素上綁定的事件處理函數目標元素: 實際點擊的元素
           3. 冒泡: 按照捕獲的順序,由內層,向外層逐層觸發捕獲的事件處理函數

        IE8:2各階段:

           1. 目標觸發: 優先觸發目標元素上綁定的事件處理函數目標元素: 實際點擊的元素
           2. 冒泡: 按照捕獲的順序,由內層,向外層逐層觸發捕獲的事件處理函數

 

 

      是否可修改事件執行順序:能夠,修改addEventlistener的第三個參數爲true,能夠在捕獲階段觸發,同一事件不能夠觸發兩次。

 

        若是點在外層元素上,捕獲只到目標元素結束

        2.在js中動態綁定事件處理函數:

            DOM標準:事件對象做爲事件處理函數第一個參數,出入函數中arguments[0]==>事件對象

            IE8:事件對象是window下的一個全局屬性:window.event

            兼容:var e = window.event||arguments[0];

                                       IE8                DOM

固定套路:  

   1.取消冒泡:在當前事件處理函數執行結尾,阻止繼續冒泡

        DOM:e.stopPropagation();

        IE8:e.cancelBubble=true;

        兼容代碼:if(e.stopPropagation){e.stopPropagation();}else{e.cancelBubble=true;}

   2.利用冒泡:

      優化:多個子元素,定義了相同的事件處理函數,其實只須要將事件處理函數在父元素上定義一次便可。

              Why:每一個處理函數的綁定都是一個對象,處理函數綁定的越多,網頁執行效率越低。

                       減小處理函數的綁定次數,能夠提升執行效率。

             得到目標元素:var target = e.srcElement||e.target;

                                                         IE                DOM

             目標元素 vs this 

              this:會隨事件冒泡而改變

              目標元素:不受冒泡影響,始終保存最初的目標元素對象

 

<html>
  <head>
    <title>取消與利用冒泡</title>
    <meta charset="utf-8"/>
    <link rel="stylesheet" href="css/3.css"/>
  </head>
  <body>
    <div id="keys">
      <button>1</button>
      <button>2</button>
      <button>3</button>
      <button>4</button><br>
      <button>C</button>
      <button>+</button>
      <button>-</button>
      <button>=</button>
    </div>
  <textarea id="sc" style="resize:none;width:200px; height:50px;" readonly></textarea>
  <script>
    //定義函數calc,得到事件對象e
    function calc(e){
    //得到目標元素target
    var target=e.srcElement||e.target;
    //若是target是button
    if(target.nodeName=="BUTTON"){
             //判斷target的內容
      switch(target.innerHTML){
        case "C"://是C
          //清除id爲sc的元素的內容
          sc.value=""; break;
        case "="://是=
          try{//嘗試:
          //將sc的內容傳入eval中,將結果保存回sc的內容中
          sc.value=eval(sc.value);
          }catch(err){//若是出錯
          //將錯誤對象轉爲字符串,賦值給sc的內容
          sc.value=String(err);
          }
          break;
       default: //不然
      //將target的內容拼接到sc的內容上
      sc.value+=target.innerHTML
    }
  }
}
//爲id爲keys的div添加單擊事件監聽,函數爲calc
keys.addEventListener("click",calc);
    </script>
  </body>
</html>

3.取消事件:事件執行過程當中,發生異常情況,可阻止事件觸發

      好比:onsubmit:自動提交觸發

                  若是驗證未經過,可取消繼續提交

      什麼時候使用:取消元素默認的事件行爲。 

       1.在html中綁定事件處理函數:2個return

       若是<form onsubmit="return valiAll()">
                  caliAll(){..... return true/false}

                          若是返回true,繼續執行

                          若是返回false,取消執行

<html>
<head>
<meta charset="UTF-8">
<title>阻止自動錶單提交</title>
<link rel="Stylesheet" href="css/5.css" />

</head>
<body>
<!--1. 使用HTML綁定事件處理函數時-->
<form>
<h2>增長管理員</h2>
<table>
<tr>
<td>姓名:</td><td>
<input name="username" onfocus="getFocus(this)"
onblur="valiName(this)"/>
<span>*</span>
</td>
<td>
<div class="vali_Info">
10個字符之內的字母、數字和下劃線的組合
</div>
</td>
</tr>
<tr>
<td>密碼:</td>
<td>
<input type="password" name="pwd" onfocus="getFocus(this)" onblur="valiPwd(this)"/>
<span>*</span>
</td>
<td>
<div class="vali_Info">6位數字</div>
</td>
</tr>
<tr>
<td></td>
<td colspan="2">
<!--取消事件,2個return-->
<input type="submit" value="保存"/>
<input type="reset" value="重填"/>
</td>
</tr>
</table>
</form>
<script src="js/5.js"></script>
</body>
</html>

 

function getFocus(txt){
txt.className="txt_focus";
txt.parentNode //td
.parentNode //tr
.querySelector("div")
.className="";
}
function valiName(txt){
txt.className="";
var div=txt.parentNode //td
.parentNode //tr
.querySelector("div");
if(/^\w{1,10}$/.test(txt.value)){
div.className="vali_success";
return true;
}else{//不然
div.className="vali_fail";
return false;
}
}
function valiPwd(txt){
txt.className="";
var div=txt.parentNode //td
.parentNode //tr
.querySelector("div");
if(/^\d{6}$/.test(txt.value)){
div.className="vali_success";
return true;
}else{//不然
div.className="vali_fail";
return false;
}
}
//爲頁面中第一個form綁定提交事件監聽,函數爲valiAll
document.forms[0].addEventListener(
"submit",valiAll);
function valiAll(e){
//得到頁面中第一個form對象保存在form中
var form=document.forms[0];
//得到form中name爲username的文本框,保存在txtName中
var txtName=form.username;
//調用valiName,傳入txtName做爲參數,將驗證結果保存在rName中
var rName=valiName(txtName);
//得到form中的name爲pwd的文本框,保存在txtPwd中
var txtPwd=form.pwd;
//調用valiPwd,傳入txtPwd做爲參數,將驗證結果保存在rPwd中
var rPwd=valiPwd(txtPwd);
//若是rName和rPwd不都爲true,就取消事件
!(rName&&rPwd)&&(e.preventDefault());
}

 

      如何取消:if(e.preventDefault){e.preventDefault();//DOM}else{e.returnValue=flase;//IE}

相關文章
相關標籤/搜索