JavaScript事件(五)

  • DOM入門
  1. DOM就是Html頁面的模型,將每個標籤都做爲一個對象,JavaScript通過調用DOM中的屬性、方法就可以對網頁中的文本框、層等元素進行編程控制。比如通過操作文本框的DOM對象,就可以讀取文本框中的值、設置文本框中的值。 JavaScript→DOM就是C#→ADO.NET。DOM就是一些讓JavaScript能操作Html頁面控件的類、函數。
  2. DOM也像WinForm一樣,通過事件、屬性、方法進行編程。
  3. CSS+JavaScript+DOM=DHtml
  • DOM模型
  • 事件
  1. 在DOM中有很多事件。演示:
    1.  <body οnmοusedοwn=“alert(‘別點我!’);”>//注意body的範圍。Body的範圍就是body裏內容的範圍,如果沒有內容,就無法觸發事件。
    2. 有時事件的響應代碼比較多,就要放到一個函數中:

<script type="text/javascript">

      function userMouseDown() {

            alert('網頁被你點壞了>_<~~,賠吧!');

            alert('逗你玩呢~~');

        }

 </script>

<input type="button" value="按鈕" οnmοusedοwn=“userMouseDown();" />

注:οnmοusedοwn=“userMouseDown();”中,userMouseDown後的括號不能丟(不能寫成οnmοusedοwn=“userMouseDown” ),帶()表示調用函數,直接寫函數名錶示設置事件的處理函數爲userMouseDown。可以這樣說吧,onclick後會觸發一個方法,

οnclick=f1;的意思就是說onclick觸發的方法就是f1.

οnclick=“f1()”的意思就是說onclick觸發的方法裏調用了f1

οnclick=事件引發後的處理程序。

οnclick="        f(this);                "; //在onclick的事件處理程序中調用了f()方法

οnclick=f;//該事件的處理程序就是f()方法。

  • 動態設置事件
  1. JavaScript也可以像.Net中那樣動態設置事件,Button.Click+=…

<script type="text/javascript">

function F1() {     alert('In F1');     }

function F2() {     alert('In F2');     }

</script>

<input type="button" value="關聯F1" οnclick="document.οnclick=F1;" />

<input type="button" value="關聯F2" οnclick="document.οnclick=F2;" />

  1. 注意: οnclick=“document.οnclick=F1;” 此處的F1不要加括號,加括號就編程了調用F1()函數,並且把返回值賦值給document.onclick了。

document.body.onclick範圍僅限於body

document.onclick範圍爲整個文檔。

  • 事件冒泡
  1. 事件冒泡:如果元素A嵌套在元素B中,那麼A被點擊不僅Aonclick事件會被觸發,Bonclick也會被觸發。觸發的順序是“由內而外” 。驗證:在頁面上添加一個tabletable裏有trtr裏有tdtd裏放一個p,在ptdtrtable中添加onclick事件響應,例:

<table οnclick="alert('table onclick');">

        <tr οnclick="alert('tr onclick');">

            <td οnclick="alert('td onclick');"><p οnclick="alert('p onclick');">aaaa</p></td>

            <td>bbb</td>

        </tr>

    </table>

  1. 取消事件冒泡: window.event.cancelBubble = true;//IE下的寫法。

<table οnclick="alert('table onclick');">

        <tr οnclick=" window.event.cancelBubble = true;alert('tr onclick');">

            <td οnclick="alert('td onclick');">

                <p οnclick=" window.event.cancelBubble = true;alert('p onclick');"> aaaa</p>

            </td>

            <td>

                bbb

            </td>

        </tr>

    </table>

  1. window.onloadbodyonload

1.二者效果完全一樣,都是在頁面內容都加載完畢後才觸發。

2.由於網頁中沒有window所以在body中寫onload

3.建議使用window.onload//使用js腳本的方式高效

4.其實應該是document.onload,但是所有瀏覽器都實現到了window對象上。

  • 事件中的this
  1. 事件中的this。除了可以使用event.srcElement在事件響應函數中,this表示發生事件的控件。只有在事件響應函數才能使用this獲得發生事件的控件,在事件響應函數調用的函數中不能使用(這裏的this表示window對象),如果要使用則要將this傳遞給函數或者使用event.srcElement,例:

 <html xmlns="http://www.w3.org/1999/xhtml">

<head>

    <title></title>

    <script type="text/javascript">

        function f3() {

            alert(event.srcElement.value);

        }

        function f4() {

            //事件的調用函數中this 代表window對象

            alert(this.location.href);

            alert(this.value);

        }

        window.onload = function () {

            btn5.onclick = function () {

                alert(event.srcElement.value);

            }

            btn6.onclick = function () {

                //在事件響應函數中 this代表當前觸發事件的對象

                alert(this.value);

            }

        }

    </script>

</head>

<body>

    <input id="btn1" type="button" value="btn1" οnclick="alert(event.srcElement.value)" /><br />

    <input id="btn2" type="button" value="btn2" οnclick="alert(this.value)" /><br />

    <input id="btn3" type="button" value="btn3" οnclick="f3()" /><br />

    <input id="btn4" type="button" value="btn4" οnclick="f4()" /><br />

    <!-- 此時this是觸發事件的對象-->

     <!--<input id="Button1" type="button" value="btn4" οnclick="f4(this)" />--><br />

    <input id="btn5" type="button" value="btn5" /><br />

    <input id="btn6" type="button" value="btn6" /><br />

</body>

</html>

  1. (*)thisevent.srcElement的語義是不一樣的,this就是表示當前監聽事件的這個對象,event.srcElement是引發事件的對象:事件冒泡,例:

  <!--srcElement  引發事件的對象-->

     <table οnclick="alert(event.srcElement.innerHTML);">

        <tr οnclick="alert(event.srcElement.innerHTML);">

            <td οnclick="alert(event.srcElement.innerHTML);"><p οnclick="alert(event.srcElement.innerHTML);">aaaa</p></td>

            <td>bbb</td>

        </tr>

    </table>

     <!--this  監聽事件的這個對象-->

     <table οnclick="alert(this.innerHTML);">

        <tr οnclick="alert(this.innerHTML);">

            <td οnclick="alert(this.innerHTML);"><p οnclick="alert(this.innerHTML);">aaaa</p></td>

            <td>bbb</td>

        </tr>

    </table>

  1. <body οnclick=//這個叫做事件調用函數,在這裏寫this表示發生事件的控件。在這裏調用另外一個函數F1,F1中不能使用this表示發生事件的控件”>

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章