一.javascript事件介绍

javascript是事件驱动的,发生某种事件后可以触发一段javascript代码的执行,先来看几个名词:用户点击html页面中的按钮,这时会发生一个事件,叫做点击事件,被点击的按钮叫做事件源,点击按钮后弹出一个对话框,点击按钮后发生的行为叫做响应行为。

javascript的常用事件
onclick:点击事件
onchange:域内容被改变的事件
onfocus:获得焦点的事件
onblur:失去焦点的事件
onmouseover:鼠标悬浮的事件
onmouseout:鼠标离开的事件
onload:加载完毕的事件
事件的绑定方式
事件绑定有三种方式:

将事件和响应行为都内嵌到html标签中

  1. <input type="button" value="点我" onclick="alert('事件绑定1')"/>

将事件内嵌到html中,响应行为用javascript函数进行封装

  1. <input type="button" value="点我" onclick="fun()" />
  2. <script type="text/javascript">
  3. function fun(){
  4. alert("事件绑定2");
  5. }
  6. </script>

将事件和响应行为与html标签完全分离

  1. <input id="btn" type="button" value="点我"/>
  2. <script type="text/javascript">
  3. //document是一个文档对象
  4. //通过getElementById的方法可以获取该id的标签对象
  5. var btn = document.getElementById("btn");
  6. btn.onclick = function(){
  7. alert("事件绑定3");
  8. };
  9. </script>

this关键字
使用this可以传递html中的标签对象,如下代码使用this将整个input标签作为对象传入到了javascript中,这样可以获取标签中的属性了。

  1. <input id="btn" type="button" value="点我" onclick="fun(this)"/>
  2. <script type="text/javascript">
  3. function fun(obj){
  4. alert(obj.value);
  5. }
  6. </script>

二.事件的应用

onchange

使用onchange事件实现城市和区的二级联动

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>onchange</title>
  6. </head>
  7. <body>
  8. <select id="city">
  9. <option value="bj">北京</option>
  10. <option value="tj">天津</option>
  11. <option value="sh">上海</option>
  12. </select>
  13. <select id="area">
  14. <option>海淀</option>
  15. <option>朝阳</option>
  16. </select>
  17. </body>
  18. <script type="text/javascript">
  19. var select = document.getElementById("city");
  20. select.onchange = function(){
  21. var optionVal = select.value;
  22. var area = document.getElementById("area");
  23. if('bj' == optionVal){
  24. area.innerHTML = "<option>海淀</option><option>朝阳</option>";
  25. }else if('tj' == optionVal){
  26. area.innerHTML = "<option>南开</option><option>静海</option>";
  27. }else if('sh' == optionVal){
  28. area.innerHTML = "<option>浦东</option><option>黄浦</option>";
  29. }else{
  30. alert("error");
  31. }
  32. };
  33. </script>
  34. </html>

onfocus和onblur

实现当input获得焦点和失去焦点分别给用户一个提示信息。

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>onfocus和onblur</title>
  6. </head>
  7. <body>
  8. <label for="name">姓名:</label>
  9. <input id="name" type="text" /><span id="nameValid"></span>
  10. </body>
  11. <script type="text/javascript">
  12. var name = document.getElementById("name");
  13. name.onfocus = function(){
  14. //友好提示
  15. var span = document.getElementById("nameValid");
  16. span.innerHTML = "姓名长度最小8位";
  17. span.style.color = "green";
  18. };
  19. name.onblur = function(){
  20. //错误提示
  21. var span = document.getElementById("nameValid");
  22. span.innerHTML = "格式不正确";
  23. span.style.color = "red";
  24. };
  25. </script>
  26. </html>

onload

实现当页面加载完毕后,动态的设置span中的内容

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>onload</title>
  6. <script type="text/javascript">
  7. window.onload = function(){
  8. var span = document.getElementById("span");
  9. span.innerHTML = "hello js";
  10. };
  11. </script>
  12. </head>
  13. <body>
  14. <span id="span"></span>
  15. </body>
  16. </html>

onmouseover和onmouseout

实现一个div元素被鼠标移入时变为粉色 移出恢复原色

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>onmouseover和onmouseout</title>
  6. <style type="text/css">
  7. #d1{background-color: blue;width:100px;height: 100px;}
  8. </style>
  9. </head>
  10. <body>
  11. <div id="d1"></div>
  12. </body>
  13. <script type="text/javascript">
  14. var div = document.getElementById("d1");
  15. div.onmouseover = function(){
  16. this.style.backgroundColor = "pink";
  17. };
  18. div.onmouseout = function(){
  19. this.style.backgroundColor = "blue";
  20. };
  21. </script>
  22. </html>

阻止事件的默认行为

a标签中有默认的onclick行为,这个行为叫做事件默认行为,可以通过js代码来阻止事件的默认行为,在不同的浏览器中需要使用不同的写法。

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>阻止事件的默认行为</title>
  6. <script type="text/javascript">
  7. //IE:window.event.returnValue = false;
  8. //W3C:传递过来的对象.preventDefault();
  9. function fun(e){
  10. //W3C
  11. if(e && e.preventDefault){
  12. alert("W3C");
  13. e.preventDefault();
  14. }else{
  15. alert("IE");
  16. window.event.returnValue = false;
  17. }
  18. }
  19. </script>
  20. </head>
  21. <body>
  22. <a href="15-onload事件.html" onclick="fun(event)">点我啊</a>
  23. </body>
  24. </html>

阻止事件的传播

如下代码,一个大的div中包裹了一个小的div,对于浏览器来说,小的div覆盖了大div的一部分,当点击小div时,也会触发大div的onclick事件,可以使用js代码来阻止这种事件的传播。

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>阻止事件的传播</title>
  6. <style type="text/css">
  7. #d1{
  8. width:100px;
  9. height:100px;
  10. background-color:orange;
  11. padding:50px;
  12. }
  13. #d2{
  14. width:100px;
  15. height:100px;
  16. background-color:pink;
  17. }
  18. </style>
  19. <script type="text/javascript">
  20. //IE:window.event.cancelBubble = false;
  21. //W3C:传递过来的对象.stopPropagation();
  22. function fun1(){
  23. alert("fun1");
  24. }
  25. function fun2(e){
  26. alert("fun2");
  27. //W3C
  28. if(e && e.stopPropagation){
  29. e.stopPropagation();
  30. }else{
  31. //IE
  32. window.event.cancelBubble = false;
  33. }
  34. }
  35. </script>
  36. </head>
  37. <body>
  38. <div id="d1" onclick="fun1();">
  39. <div id="d2" onclick="fun2(event);">
  40. </div>
  41. </div>
  42. </body>
  43. </html>