jQuery从入门到精通 (软件开发视频大讲堂)
上QQ阅读APP看书,第一时间看更新

6.1 JavaScript事件处理

6.1.1 事件与事件名称

事件是一些可以通过脚本响应的页面动作。当用户按下鼠标键或者提交一个表单,甚至在页面上移动鼠标时,事件就会出现。事件处理是一段JavaScript代码,总是与页面中的特定部分以及一定的事件相关联。当与页面特定部分关联的事件发生时,事件处理器就会被调用。

绝大多数事件的命名都是描述性的,很容易理解。例如click、submit、mouseover等,通过名称就可以猜测其含义。但也有少数事件的名称不易理解,例如blur(英文的字面意思为“模糊”),表示一个域或者一个表单失去焦点。通常,事件处理器的命名原则是,在事件名称前加上前缀on。例如,对于click事件,其处理器名为onClick。

6.1.2 JavaScript的常用事件

为了便于读者查找JavaScript中的常用事件,下面以表格的形式对各事件进行说明。JavaScript的相关事件如表6.1所示。

表6.1 JavaScript的相关事件

续表

续表

【例6.1】在页面中单击某个位置,会弹出对话框,显示被触发的事件类型。(实例位置:光盘\TM\sl\6\1)

(1)创建一个名称为index.html的文件。

(2)在页面的<body>标记中,定义onmousedown事件的处理函数为getEventType(),参数event是Event对象。具体代码如下:

        <body onmousedown="getEventType(event)">
        <h3 class="title">JavaScript事件类型</h3>
        <p>在页面中单击某个位置,会弹出对话框,显示被触发的事件类型。</p>
        </body>

(3)在页面的<head>标记内,编写getEventType()函数,调用alert()方法显示event.type属性,代码如下:

        <script type="text/javascript">
         function getEventType(){
            alert(event.type);    //弹出提示框,显示事件类型
         }
        </script>

运行本实例,单击页面主体位置,运行结果如图6.1所示。

图6.1 弹出事件类型提示框

6.1.3 event对象

JavaScript的event对象用来描述JavaScript的事件,它主要作用于IE和NN4以后的各个浏览器版本中。event对象代表事件状态,如事件发生的元素、键盘状态、鼠标位置和鼠标按钮状态。一旦事件发生,便会生成event对象,如单击一个按钮,浏览器的内存中就产生相应的event对象。

event对象具有以下属性。

(1)altLeft属性

用于设置或获取左Alt键的状态。检索左Alt键的当前状态,返回值true表示关闭,false为不关闭。

语法:

        [window.]event. altLeft

由于altLeft属性是boolean值,因此可以将该属性应用到if语句中,根据获取的值不同而执行不同的操作。

(2)ctrlLeft属性

用于设置或获取左Ctrl键的状态。检索左Ctrl键的当前状态,返回值true表示关闭,false为不关闭。

语法:

        [window.]event. ctrlLeft

由于ctrlLeft属性是boolean值,因此可以将该属性应用到if语句中,根据获取的值不同而执行不同的操作。

(3)shiftLeft属性

用于设置或获取左Shift键的状态。检索左Shift键的当前状态,返回值true表示关闭,false为不关闭。

语法:

        [window.]event. shiftLeft

由于这3个属性的值同样也都是boolean类型的,所以也可以将它们组合成一个条件在if语句中应用,并且也可以和altKey、ctrlKey和shiftKey属性同时使用。

(4)button属性

用于设置或获取事件发生时用户所单击的鼠标键。

语法:

        [window.]event.button

该属性的值如表6.2所示。

表6.2 button属性的值和说明

当用户按下多个键时,每次按键都激活一个onmousedown事件。如果用户首先单击左键,则onmousedown事件激活,event.button属性值为1;如果此时单击右键,那么onmousedown事件再次发生,但event.button属性值为3。如果脚本同时按下两个按键执行特殊动作,那么就应该忽略单一按键动作,因为在处理过程中很可能激活单键事件,从而干扰目标行为。

注意

button属性仅用于onmousedown、onmouseup和onmousemove事件。对于其他事件,无论鼠标状态如何,都返回0(例如:onclick)。

(5)clientX属性

用于获取鼠标在浏览器窗口中的X坐标,该属性是一个只读属性,即只能获取到鼠标的当前位置,不能改变鼠标的位置。

语法:

        [window.]event. clientX

(6)clientY属性

用于获取鼠标在浏览器窗口中的Y坐标,该属性是一个只读属性,即只能获取到鼠标的当前位置,不能改变鼠标的位置。

语法:

        [window.]event. clientY

(7)X属性

用于设置或获取鼠标指针位置相对于CSS属性中有position属性的上级元素的X轴坐标。如果没有CSS属性中有position属性的上级元素,默认以body元素作为参考对象。

语法:

        [window.]event. X

如果鼠标事件触发后,鼠标移出窗口外,则返回的值为-1。这是个只读属性,只能通过它获取鼠标的当前位置,却不能用它来更改鼠标的位置。

(8)Y属性

用于设置或获取鼠标指针位置相对于CSS属性中有position属性的上级元素的Y轴坐标。如果没有CSS属性中有position属性的上级元素,默认以body元素作为参考对象。

语法:

        [window.]event. Y

如果鼠标事件触发后,鼠标移出窗口外,则返回的值为-1。这是个只读属性,只能通过它获取鼠标的当前位置,却不能用它来更改鼠标的位置。

(9)cancelBubble属性

用于检测是否接受上层元素的事件的控制。如果该属性的值是false,则允许被上层元素的事件控制;否则值为true,不被上层元素的事件控制。

语法:

        [window.] event.cancelBubble[ = cancelBubble]

该属性的值是一个可读写的布尔值,默认值是false。

(10)srcElement属性

用于设置或获取触发事件的对象。srcElement属性是事件初始目标的HTML元素对象引用。由于事件通过元素容器层次气泡,可以在任何一个层次进行处理,因此由一个属性指向产生初始事件的元素是很有帮助的。

语法:

        [window.]event. srcElement

通过该属性可以读、写属于该元素的属性,并调用它的任何方法。

【例6.2】将altKey、ctrlKey和shiftKey属性进行组合,组成一个综合的条件,应用if语句判断当Ctrl键、Shift键和Alt键同时被按下时执行一个操作。(实例位置:光盘\TM\sl\6\2)

(1)创建一个名称为index.html的文件。

(2)在页面的<head>标记内,编写example ()函数,判断Ctrl、Shift和Alt按键是否被同时按下,如果同时按下,则弹出提示对话框并且将页面跳转至index_ok.html文件。令用户按下键盘按键时调用example ()函数,代码如下:

        <script>
        function example(){              //创建自定义函数
            //应用if语句判断Ctrl键、Shift键和Alt键是否同时被按下
            if(window.event.ctrlKey && window.event.altKey && window.event.shiftKey){
                //如果Ctrl键、Shift键和Alt键同时被按下,则执行下面的内容
                alert(’明日科技,给您拜年了!');             //弹出一个对话框
                window.location.href='index_ok.html';   //连接到一个文件
            }
        }
        document.onkeydown=example;            //应用onkeydown事件输出自定义函数example中的内容
        </script>

运行本实例,单击页面主体位置,运行结果如图6.2所示。

图6.2 altKey、ctrlKey和shiftKey属性的综合应用